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