按照答案的编程 最后输出的结果
应该是这样的吧:
第一天所剩桃子:
第二天所剩桃子:
........
第十天所剩桃子:
2.第一天摘的桃子应该是(1534+1)*2吧
问题1:如下递归函数执行过程图,答案所给代码num = (getPeachNumber(n + 1) + 1) * 2;是n+1的形式,故该函数从主函数所给实参(这里是1)开始执行n+1的运算。递归函数按照123456789的顺序引用自身,然后逆序(987654321)执行运算过程,因此打印的顺序为逆序。如要正序打印,以下为参考代码:
#include <stdio.h>
int getPeachNumber(int n)
{
int num;
if (n == 0) //这里是结束条件,不打印该值,而是打印后面一个值(此处为1)
num = 3070; //这里需要提前计算出结果。当然也有代码不需要自己提前计算出结果,奈何我学识浅薄,只能想到这么个办法
else
{
num = (getPeachNumber(n - 1) - 1) / 2; //这里进行实参的n-1运算,即按照987654321顺序的运算
printf("第%d天所剩桃子%d个\n", n, num);
}
return num;
}
int main()
{
getPeachNumber(10); //如果到第九天停止,则此处实参需改为9
printf("猴子第一天摘了:%d个桃子。\n", getPeachNumber(0));
printf("猴子第一天剩了:%d个桃子。\n", getPeachNumber(1)); //这里调用了1,会多输出一个第一天
return 0;
}
问题2:看了上面的内容,想必你已经知道了吧?
程序应该改成 printf("猴子第一天摘了:%d个桃子。\n", (num+1)*2);才对
同求,第一天剩下的桃子应该是1534,那第一天摘的桃子就是(1534+1)*2啊
求明白人讲解
先进后出 进123456789出987654321 我不确定仅供参考