n=1的结果不应该是(getpeachnumber (2)+1)*2+(getpeachnumber(3)+1)*2)+……+(getpeachnumber(9)+1)*2+(getpeachnumber(10)+1)*2吗?
最后一项也等于4
请问getpeachnumber(1~9)的值是怎么算的?
还有 函数为什么自动从第九天开始打印了?为什么不是第100天?第1000天?
我琢磨了两天,最后受不了了问了问嵌入式同事,他是这样给我解释的,那个getPeachNumber函数在第一次进圈开始套的时候,在getPeachNumber这个函数内程序跑到num=getPeachNumber这又跑一圈,一直跑到if那返回个num=1,才会继续乘2+2
getPeachNumber(n)给出的结果sum是第n天在吃之前的桃子数量,也就是第(n-1)天吃完之后剩下的桃子数量。
getPeachNumber(n)自定义函数在main()函数中的第一个参数值是 1 ,自定义函数getPeachNumber(n)中的终止条件是 n==10。故不可能出现第100天,第1000天的情况。
getPeachNumber(n)自定义函数的if语句中,有一段
printf("第%d天所剩桃子%d个\n", n,num);
这是在自定义函数返回num结果之前就已经打印出来了的。
整个程序中,(n=1到10) 和( 当n=10时,num=1)这两项数据是已知的,然后就是第n天和第n+1天,num的变化规律是知道的。 要想知道第1天有多少桃子,只能从第10天有1个桃子,推算出第9天,有(1+1)*2=4个桃子,然后是第8天,有(4+1)*2=10个桃子…… 同样的,在递归函数中,最先计算出答案的也是第9天的桃子数量,同时可以将第9天的桃子数量打印出来,然后是第8天,第7天……
#include<stdio.h>
#include <windows.h>
void color(int x) //设置字体颜色
{
if (x >= 0 && x <= 15)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
else
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
int getPeachNumber(int n)
{
int num=1; //定义所剩桃子数
if (n == 10)
{
return num; //递归结束条件
}
else
{
num = ((getPeachNumber(n+1))+1)*2;
printf("第%d天所剩桃子%d个\n", n, num); //天数,所剩桃子个数
}
return num;
}
int main()
{
color(2);
int num = getPeachNumber(1);
printf("猴子第一天摘了:%d个桃子。\n", num);
return 0;
}