求大佬讲讲递归,完全不懂啊,很难受。
我是小白,大老求罩
qq_獨倚靈劍醉仙樓_0
2017-08-03 14:34:59
TA貢獻(xiàn)40條經(jīng)驗 獲得超8個贊
/**遞歸的函數(shù)*/ private?int?getNumber(String?str){ ????int?res?=?0; ????res?=?summary(str); ????if?(res?<?10) ????????return?res; ????else ????return?getNumber(String.valueOf(res)); } /** ?*?計算各個位數(shù)字總和的函數(shù) ?*?@param?number?傳入的參數(shù) ?*?@return?返回的結(jié)果 ?*/ private?int?summary(String?number){ ????int?res?=?0; ????for?(int?i?=?0;i<number.length();i++){ ????????res?+=?Integer.valueOf(String.valueOf(number.charAt(i))); ????} ????return?res; }
這是我之前在浙大ACM上做過的一道題目用的就是遞歸你可以參考一下
這是Java語言的
TA貢獻(xiàn)3593條經(jīng)驗 獲得超0個贊
TA貢獻(xiàn)40條經(jīng)驗 獲得超8個贊
#include<stdio.h> int?getNumber(int?n){ n?+=?1; printf("N=?%d\n",n); if?(n>20) return?n;?//當(dāng)遞歸達(dá)到了條件返回n的當(dāng)前數(shù)值來跳出遞歸 else ? getNumber(n);?//如果沒有達(dá)到條件就調(diào)用自身 ? } int?main(){ printf("%d\n",getNumber(6)); //調(diào)用getNumber();后進(jìn)入第一次遞歸 /** getNumber(6){ n?+=?1;?此時?n?=?7 printf("N=?%d\n",n);?//輸出了一條?N=?7 if?(n>20)?//進(jìn)入條件判斷?7?<?20?所以進(jìn)入else的代碼塊? return?n;? //當(dāng)遞歸到了?21?開始大于?20?了就跳出遞歸 else ? getNumber(n);? ? //此時相當(dāng)于又進(jìn)行了一次getNumber(7);?過程與getNumber(6);一樣??????????? ? } */ return?0; }
簡單的例子 當(dāng)n小于20時候一直遞歸,等到大于20了在返回
附一張運行圖
舉報