遞歸函數(shù)(一)
#include <stdio.h>
/* 定義獲取單詞數(shù)量的函數(shù) */
int getWordNumber(int n)
{ ??
? ? if(n == 1)
? ? {
? ? ? ? return 1; ? ?//第一天只會1個單詞
? ? }
? ? else
? ? {
? ? ? ? return getWordNumber(n-1)+n ; ? ? ? //到第天會的單詞數(shù)量
? ? }
}
int main()
{
? ? int num = getWordNumber(10); ? ? //獲取會了的單詞數(shù)量
? ? printf("小明第10天記了:%d個單詞。\n", num);
? ? return 0;
}
遞歸函數(shù),是碰到什么條件停止循環(huán)的?到最后為什么不是getWordNumber(1-1)+1?
2016-10-24
因為getWorldNumber的值已經(jīng)確定了是1,所以就不會再繼續(xù)執(zhí)行g(shù)etWorldNumber(n-1)+n了。
在主方法main中調(diào)用了getWordNumber方法,當(dāng)函數(shù)走到int num = getWordNumber(10)時又會返回去調(diào)用getwordNumber方法;反復(fù)執(zhí)行直到滿足遞歸函數(shù)終結(jié)條件停止;
遞歸函數(shù)的執(zhí)行過程:執(zhí)行時遇到getWordNumber(10),保存當(dāng)前的n(n-1)+n以及getWordNumber(10)執(zhí)行完后的返回地址;然后繼續(xù)執(zhí)行,繼續(xù)對局部變量和函數(shù)返回地址入棧保存。直到遇到遞歸結(jié)束條件,開始彈棧,這是將棧頂n域值恢復(fù)給n,棧頂?shù)刂酚蜃鳛榉祷氐刂烦鰲?,繼續(xù)這樣下去,直到???/p>
2016-10-24
回復(fù) JustWannaHugU:#include <stdio.h>
/* 定義獲取單詞數(shù)量的函數(shù) */
int getWordNumber(int n)
{ ??
? ? if(n == 1)//那么,最后為什么不是直接輸出這個呢?如果這個不成立,不是才執(zhí)行下面的else嗎?
? ? {
? ? ? ? return 1; ? ?
? ? }
? ? else
? ? {
? ? ? ? return getWordNumber(n-1)+n ; //這里一直最后會成(1-1)+1對嗎???? ? ? ?
? ? }
}
int main()
{
? ? int num = getWordNumber(10); ? ? //獲取會了的單詞數(shù)量
? ? printf("小明第10天記了:%d個單詞。\n", num);
? ? return 0;
}