課程
/后端開發
/C
/C語言入門
為什么是getPeachNumber(n+1)不是getPeachNumber (n)
2017-01-07
源自:C語言入門 5-8
正在回答
有點明白額
寫的很詳細,看懂了,謝了
首先getPeachNumber(int n)就是要得到第n天剩下的桃子個數,現在就是已知getPeachNumber(10) ,要得到getPeachNumber(1)。并且知道:第二天剩桃個數=前一天剩桃個數的一半-1;那么getPeachNumber(2)=getPeachNumber(1)/2-1,同理getPeachNumber(3)=getPeachNumber(2)/2-1;依此類推,得到getPeachNumber(10)=getPeachNumber(9)/2-1。由getPeachNumber(10)有了具體值,得到終止,反推得到getPeachNumber(9),然后得到getPeachNumber(8),最終得到getPeachNumber(1)。
?這下就知道,遞歸關系和終止條件,就是關鍵。在getPeachNumber(int n)中,if終止,else里面遞歸。
現在我們用n表示天數,getPeachNumber(int n)表示第n天剩桃個數,以上關系就可以表達為:getPeachNumber(n+1)=getPeachNumber(n)/2-1 ;即getPeachNumber(n)=(getPeachNumber(n+1)+1)*2;(這就是遞歸條件,讓第n天所剩桃與第n+1天所剩桃產生關系)。
在getPeachNumber(int n)函數中,定義num為第n天的剩桃數,所以num=getPeachNumber(n),也就有num=(getPeachNumber(n+1)+1)*2 (也就是這個關系式將第n天與第n+1天聯系起來了)。
寫的有點啰嗦,不知道你明白沒有。舉個例(不準確但我覺得可以幫助理解):10個人排成一列,每人一個號碼,且后一個人的號碼是前一個人的號碼的一半減一(這是遞歸關系)?,F在只有最后一個人知道自己的號碼是1(這是終止條件),那么第一個人的號碼是多少呢?是不是第一個人去問第二個人,第二人問第三人,。。。最后第九人問第十人,然后的第十這個人說自己是1,然后第九人就知道自己4(這里遞歸關系算出來),。。。。最后第一個人得到自己的號碼。
因為是遞歸,如果你寫‘getPeachNumber (n)’則函數只是重復地賦值,變量不發生改變。而‘getPeachNumber(n+1)’則是每次函數復調時賦值,變量都加上‘1’;
也可以簡單地拆分為‘n+1’和‘n’的區別。這種函數的復調都是解有序數列問題的;比如:第1人有 1 塊錢,第2人比第 1 人多 1 塊錢,第3人比第 2 ~~~以此類推,問第 100人有多少錢。
諾丁漢 提問者
舉報
C語言入門視頻教程,帶你進入編程世界的必修課-C語言
2 回答關于getWorldNumber(n-1)+n 的理解
1 回答關于(n+1)的理解
1 回答遞歸函數 關于n==1
3 回答關于%s\n的問題
5 回答n=((n+1)+1)*2,為啥不能用 n+1=n*0.5-1即n=(n-1)*0.5-1
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2017-01-16
有點明白額
2017-01-12
寫的很詳細,看懂了,謝了
2017-01-10
首先getPeachNumber(int n)就是要得到第n天剩下的桃子個數,現在就是已知getPeachNumber(10) ,要得到getPeachNumber(1)。并且知道:第二天剩桃個數=前一天剩桃個數的一半-1;那么getPeachNumber(2)=getPeachNumber(1)/2-1,同理getPeachNumber(3)=getPeachNumber(2)/2-1;依此類推,得到getPeachNumber(10)=getPeachNumber(9)/2-1。由getPeachNumber(10)有了具體值,得到終止,反推得到getPeachNumber(9),然后得到getPeachNumber(8),最終得到getPeachNumber(1)。
?這下就知道,遞歸關系和終止條件,就是關鍵。在getPeachNumber(int n)中,if終止,else里面遞歸。
現在我們用n表示天數,getPeachNumber(int n)表示第n天剩桃個數,以上關系就可以表達為:getPeachNumber(n+1)=getPeachNumber(n)/2-1 ;即getPeachNumber(n)=(getPeachNumber(n+1)+1)*2;(這就是遞歸條件,讓第n天所剩桃與第n+1天所剩桃產生關系)。
在getPeachNumber(int n)函數中,定義num為第n天的剩桃數,所以num=getPeachNumber(n),也就有num=(getPeachNumber(n+1)+1)*2 (也就是這個關系式將第n天與第n+1天聯系起來了)。
寫的有點啰嗦,不知道你明白沒有。舉個例(不準確但我覺得可以幫助理解):10個人排成一列,每人一個號碼,且后一個人的號碼是前一個人的號碼的一半減一(這是遞歸關系)?,F在只有最后一個人知道自己的號碼是1(這是終止條件),那么第一個人的號碼是多少呢?是不是第一個人去問第二個人,第二人問第三人,。。。最后第九人問第十人,然后的第十這個人說自己是1,然后第九人就知道自己4(這里遞歸關系算出來),。。。。最后第一個人得到自己的號碼。
2017-01-08
因為是遞歸,如果你寫‘getPeachNumber (n)’則函數只是重復地賦值,變量不發生改變。而‘getPeachNumber(n+1)’則是每次函數復調時賦值,變量都加上‘1’;
也可以簡單地拆分為‘n+1’和‘n’的區別。這種函數的復調都是解有序數列問題的;比如:第1人有 1 塊錢,第2人比第 1 人多 1 塊錢,第3人比第 2 ~~~以此類推,問第 100人有多少錢。