2019-05-13——記如何用解決階乘問題

題目:編寫一個(gè)程序,求整數(shù)n的階乘,例如5的階乘是1*2*3*4*5

????初見題目,分析可得:

方法1:由定義,階乘都是由1開始,可以從正面,并用for循環(huán),用所定義的數(shù)字做上限,求出階乘。


創(chuàng)建一個(gè)query方法算階乘

輸入的數(shù)字為階乘算式的上限,通過for循環(huán),用1*不斷開始相乘;


當(dāng)num=3;則運(yùn)算過程如下:

i=1,i<=3,? ? ?1*1=1;? ? ?1++;

i=2,2<=3? ? ?1*2=2;? ? ? 2++;

i=3,3<=3? ? ?2*3=6;? ? ? 3++;

i=4,4!<=3? ? 所以3的階乘為1*2*3=6;


方法2:運(yùn)用遞歸,構(gòu)造一個(gè)方法,自己不斷調(diào)用自己去進(jìn)行賦值運(yùn)算;


創(chuàng)建一個(gè)query的方法求階乘

從階乘的上限開始入手,同方法一假設(shè)求3的階乘

3!=3*2*1,? 由算式可得:第一位為上限,接下來的數(shù)都是由上限不斷遞減;

即? int num=3;

3!=num*(num-1)*(num-1-1)

可看作:3!=num*(num-1)*((num-1)-1)-------后者可以繼續(xù)用query方法并用num-1繼續(xù)調(diào)用;


后者可以繼續(xù)用query方法并用num-1繼續(xù)調(diào)用

同時(shí)為了保證int都是正整數(shù);可以加多一個(gè)判斷條件:

當(dāng)num不斷調(diào)用至1的時(shí)候,直接return到1結(jié)束遞歸

總結(jié):

(1)for循環(huán)通過不斷循環(huán)可以從正序,即從1到所定上限算出階乘,是一種正向思維;

(2)運(yùn)用遞歸方法效率比較快高,運(yùn)用到了一定的嵌套思維,比for難理解一些,但是運(yùn)用起來效率比for循環(huán)的效率高。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容