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