題目:編寫一個(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)的效率高。