為什么這樣不對啊 getWordNumber(int n) 和 getWordNumber(int n-1) +n一樣的吧
#include <stdio.h>
/* 定義獲取單詞數(shù)量的函數(shù) */
int getWordNumber(int n)
{? ?
? ? if(n == 1)
? ? {
? ? ? ? return 1;? ? //第一天只會1個(gè)單詞
? ? }
? ? else{
? ? ? ? return getWordNumber(n) ;? ? ? ?//到第天會的單詞數(shù)量
? ? }
}
int main()
{
? ? int num = getWordNumber(10);? ? ?//獲取會了的單詞數(shù)量
? ? printf("小明第10天記了:%d個(gè)單詞。\n", num);
? ? return 0;
}
2019-10-01
看樣子你還沒有理解遞歸函數(shù)啊,看一下5-8的那張圖片吧,會幫助你理解遞歸函數(shù)的,如果你那樣寫的話每次?getWordNumber()函數(shù)讀到的n值不變?,就會一直執(zhí)行else里面的語句 。
之所以要return getWordNumber(n-1)而不是getWordNumber(n),就是要讓每次的讀取值減小1,直到讀取到的值等于?1,然后return 1,就不再調(diào)用自己。(函數(shù)中的return就是給函數(shù)一個(gè)值,因?yàn)閞eturn后面還要調(diào)用函數(shù) ,所以函數(shù)會一直計(jì)算下去,直到不再調(diào)用函數(shù))比如return 1就是很直接的返回值,不用計(jì)算直接返回,而return?getWordNumber(n)就要計(jì)算了才能返回值
而getWordNumber(n-1)后面還加個(gè)n就是為了? ?每一次調(diào)用自己都會加上一個(gè)對應(yīng)的數(shù),直到n=1直接return 1不再調(diào)用自己。
其實(shí)可以這樣理解吧,第一次返回的是? ? getWordNumber(n-1)+n? ?因?yàn)? ?getWordNumber(n-1)? ?的值未知所以還得再計(jì)算getWordNumber(n-1),然后? ?getWordNumber(n-1)? ?的值又等于? ?getWordNumber(n-2)+n-1? ?getWordNumber(n-1)? 后讀取的值變小1,所以n對應(yīng)位置的數(shù)都減小了1,然后又是getWordNumber(n-2)再計(jì)算得到? ? ( getWordNumber(n-2)+n-1 ) +n? ....最后n=1的時(shí)候返回1并停止得到((......)+n-3)+n-2)+n-1)+n。
2019-10-01
如果你n不減1,那么這遞歸是無限進(jìn)行的,因?yàn)閷?shí)參永遠(yuǎn)到不了1
2019-10-01
如果你n不減1,那么這遞歸是無限進(jìn)行的,因?yàn)閷?shí)參永遠(yuǎn)到不了1
2019-10-01
()里邊的是函數(shù)而不是一個(gè)算法,因此有區(qū)別?
2019-10-01
你這個(gè)運(yùn)行的時(shí)候是不是無限循環(huán)了呀,?return getWordNumber(n) ; ?沒有遞減的地方一直循環(huán)一個(gè)數(shù),如果輸出的話也只有一個(gè)值,輸入和輸出完全一樣。