能詳細(xì)解釋一下這個(gè)代碼嗎?還有 num = (getPeachNumber(n+1)+1)*2怎么解讀?
#include <stdio.h>
int getPeachNumber(n)
{
??? int num;??? //定義所剩桃子數(shù)
??? if(n==10)
??? {
?????? return 1;?????? //遞歸結(jié)束條件
??? }
??? else
??? {
??????? num = (getPeachNumber(n+1)+1)*2;?? //這里是不應(yīng)該用遞歸呢?
??????? printf("第%d天所剩桃子%d個(gè)\n",n ,num); //天數(shù),所剩桃子個(gè)數(shù)
??? }
??? return num;
}
int main()
{
??? int num = getPeachNumber(1);
??? printf("猴子第一天摘了:%d個(gè)桃子。\n", num);
??? return 0;
}
2018-08-20
題目問第一天共摘下來多少個(gè)桃子?并反向打印每天所剩桃子數(shù)。
首先,你定義了一個(gè)函數(shù)來幫你計(jì)算在某天還剩多少桃子,這個(gè)函數(shù)的名字叫 getPeachNumber(n)。這個(gè)函數(shù)里面有一個(gè)參數(shù) n,用n來表示第幾天。比如n=10,就表示第十天,n=9,就表示第九天。
然后,這個(gè)問題是讓我們求桃子的數(shù)量,所以你還需要定義一個(gè)參數(shù) num,用來定義所剩桃子數(shù)量。
根據(jù)題目要求,第n天桃子的數(shù)量干掉一半再減去一個(gè),就是第n+1天的桃子數(shù)量。所以 第n+1天桃子數(shù)量先加1再乘2,就是第n天的桃子數(shù)量。
已知第10天時(shí)候桃子數(shù)量為1。所以getPeachNumber(10)=1。
同理,第9天所剩桃子數(shù)量 num =?getPeachNumber(9) = (getPeachNumber(10)+1)*2
第8天所剩桃子數(shù)量?num =?getPeachNumber(8) = (getPeachNumber(9)+1)*2
以此類推.........
int getPeachNumber(n) ?//定義函數(shù),n表示第幾天
{
??? int num;??? //定義所剩桃子數(shù)
??? if(n==10) //條件判斷如果在第10天的時(shí)候,
??? {
?????? return 1;?????? //遞歸結(jié)束條件(就是題目中給的已知條件,第10天時(shí)候桃子還剩1個(gè))
??? }?
??? else //判斷條件,在不是第十天的時(shí)候
??? {
??????? num = (getPeachNumber(n+1)+1)*2; ? //函數(shù)中自己調(diào)用自己,就是遞歸。看最后回答你的第二個(gè)問題。
??????? printf("第%d天所剩桃子%d個(gè)\n",n ,num); ?//打印語句,打印每天所剩桃子數(shù)??? }
??? return num; ?//將num的值返回給函數(shù)。
}
int main() //程序主函數(shù)
{
??? int num = getPeachNumber(1); //這里要通過你定義的函數(shù)來計(jì)算,在第一天時(shí)候桃子數(shù)量。
??? printf("猴子第一天摘了:%d個(gè)桃子。\n", num);
??? return 0;
}
?num = (getPeachNumber(n+1)+1)*2;?? //函數(shù)中自己調(diào)用自己,就是遞歸。這里回答你的第二個(gè)問題。
本題中的運(yùn)算基本集中在這里。例如,要想求n=9時(shí)候的num值,需要根據(jù)n=10的num值來計(jì)算,getPeachNumber(9) = (getPeachNumber(10)+1)*2;求n=8時(shí)候的num值,需要根據(jù)n=9的num值來計(jì)算,第8天所剩桃子數(shù)量?num =?getPeachNumber(8) = (getPeachNumber(9)+1)*2。以此類推,相求第n天的num值,需要根據(jù)第n+1天的num值來計(jì)算。每計(jì)算一次,都需要調(diào)用一次這個(gè)函數(shù)。
num ?=?getPeachNumber(n)=(getPeachNumber(n+1)+1)*2
不論num,還是getPeachNumber(n),都看做是一個(gè)字就可以,他的原理很簡單,?
a =(b+1)*2; ? b=(c+1)*2; ? ?c=(d+1)*2; d=1。讓你求a。