为了账号安全,请及时绑定邮箱和手机立即绑定

怎样灵活运用递归函数?

怎样灵活运用递归函数?

C
玄天 2016-09-25 18:32:11
看了小编编写的递归函数(二),我有几个不理解的地方:(网址:http://www.imooc.com/code/5510)如何理解int getPeachNumber(int n)中的num = (getPeachNumber(n+1)+1)*2;以及int main()中的int number = getPeachNumber(1);这两行代码应该怎样解释?
查看完整描述

1 回答

已采纳
?
慕粉3491951

TA贡献12条经验 获得超0个赞

递归用法首先要假设你的程序已经能实现相应的功能

所以int number = getPeachNumber(1);//传入实参1,得到第一天桃子的数量

递归的实现条件:如果一个问题可以分成几个小问题,其中一个小问题和原来的问题本质上一样

递归的编写一般步骤:

  1. 编写语句描述问题的分解步骤(假设递归函数已经完成)

  2. 在递归函数的开头编写分支处理无法分解的情况

上例中第n天的桃子数量其实就是第(n+1)天桃子数量+1然后*2的结果

不管哪一天都可以分解成这种情况

然后分解到第10天就无法分解了,因为第10天只有1个桃子

这样说不知道你能清楚吗?


查看完整回答
反对 回复 2016-09-26
  • 玄天
    玄天
    请答主看我的分析: 由于天数由10-n确定,不是由n的值确定。 所以当n=1时,对应天数为9;当n=2时,对应天数为8。 因为第9天的桃子数量是第8天桃子数量的二分之一且少以1,所以可以这样表示: getPeachNumber(1)=getPeachNumber(2)/2-1; 化简可以得到(getPeachNumber(1)+1)*2=getPeachNumber(2); 即(getPeachNumber(1)+1)*2=getPeachNumber(1+1); 将1代表为n,则(getPeachNumber(n)+1)*2=getPeachNumber(n+1); 问题是:num=(getPeachNumber(n+1)+1)*2;这一行代码怎样变换至num=(getPeachNumber(n+1)+1)*2;?
  • 慕粉3491951
    慕粉3491951
    这里的n就是天数哦,不是10-n,只是因为第一天的桃子数量不能马上得到,要先得到第二天的,依次递归下次 你看到的打印信息是递归到第9天因为第10天无法分解返回了1, 然后可以得到第9天的打印信息,依次类推反向打印信息,
  • 1 回答
  • 0 关注
  • 1396 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信