亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么這樣不對啊 getWordNumber(int n) 和 getWordNumber(int n-1) +n一樣的吧

#include <stdio.h>

/* 定義獲取單詞數量的函數 */

int getWordNumber(int n)

{? ?

? ? if(n == 1)

? ? {

? ? ? ? return 1;? ? //第一天只會1個單詞

? ? }

? ? else{

? ? ? ? return getWordNumber(n) ;? ? ? ?//到第天會的單詞數量

? ? }

}

int main()

{

? ? int num = getWordNumber(10);? ? ?//獲取會了的單詞數量

? ? printf("小明第10天記了:%d個單詞。\n", num);

? ? return 0;

}


正在回答

5 回答

看樣子你還沒有理解遞歸函數啊,看一下5-8的那張圖片吧,會幫助你理解遞歸函數的,如果你那樣寫的話每次?getWordNumber()函數讀到的n值不變?,就會一直執行else里面的語句 。

之所以要return getWordNumber(n-1)而不是getWordNumber(n),就是要讓每次的讀取值減小1,直到讀取到的值等于?1,然后return 1,就不再調用自己。(函數中的return就是給函數一個值,因為return后面還要調用函數 ,所以函數會一直計算下去,直到不再調用函數)比如return 1就是很直接的返回值,不用計算直接返回,而return?getWordNumber(n)就要計算了才能返回值

而getWordNumber(n-1)后面還加個n就是為了? ?每一次調用自己都會加上一個對應的數,直到n=1直接return 1不再調用自己。

其實可以這樣理解吧,第一次返回的是? ? getWordNumber(n-1)+n? ?因為? ?getWordNumber(n-1)? ?的值未知所以還得再計算getWordNumber(n-1),然后? ?getWordNumber(n-1)? ?的值又等于? ?getWordNumber(n-2)+n-1? ?getWordNumber(n-1)? 后讀取的值變小1,所以n對應位置的數都減小了1,然后又是getWordNumber(n-2)再計算得到? ? ( getWordNumber(n-2)+n-1 ) +n? ....最后n=1的時候返回1并停止得到((......)+n-3)+n-2)+n-1)+n。

9 回復 有任何疑惑可以回復我~
#1

慕九州5315283 提問者

謝謝大佬
2019-10-02 回復 有任何疑惑可以回復我~
#2

慕移動7097258 回復 慕九州5315283 提問者

小白一個不敢當,學習的時候多理解就行,不要一味做題
2019-10-06 回復 有任何疑惑可以回復我~

如果你n不減1,那么這遞歸是無限進行的,因為實參永遠到不了1

1 回復 有任何疑惑可以回復我~

如果你n不減1,那么這遞歸是無限進行的,因為實參永遠到不了1

0 回復 有任何疑惑可以回復我~

()里邊的是函數而不是一個算法,因此有區別?

0 回復 有任何疑惑可以回復我~

你這個運行的時候是不是無限循環了呀,?return getWordNumber(n) ; ?沒有遞減的地方一直循環一個數,如果輸出的話也只有一個值,輸入和輸出完全一樣。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么這樣不對啊 getWordNumber(int n) 和 getWordNumber(int n-1) +n一樣的吧

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號