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