成员方法之递归——猴子吃桃问题

public class RecursionExercise{
    public static void main(String[] args){
        //猴子吃桃问题:
        //有一堆桃子,猴子每天吃现有桃子的一半再多一个,
        //到第十天时,就剩一个桃子了,请问第一天吃之前时有几个桃子 

        Monkey newM = new Monkey();//创建新对象
        int day = 1;//设置计算结果为第 day 天的桃子数
        int num = newM.peach(day,0);//使用递归方法
        System.out.println("第" + day + "天有" + num  + "个桃子");//打印结果
    }
}
class Monkey{
    public int peach(int day,int num){
        if (day == 10){
            num = 1;
            return num;//返回值给day = 9的peach方法       
         }else if (day => 1 && day < 10){
            num = (peach(day + 1,num) + 1) * 2;//天数与桃树的递推
            return num;//天数9的桃子数->8   8->7 ..... 2->1 最终返回到main方法中
         }
         return 0 ;//保证整个peach方法有返回值
    }
}

//思路:
//已知第10天吃之前还剩一个桃子
//再由已知条件可以推导出,每 前一天的桃子数应为(当天数量 +1)* 2
//由以上结论进行递推,天数day由1推到10,桃子数量num由day = 10 时开始递推至 day = 1

以上即为冒泡排序完整代码

以下,是本人对该代码思路的解释:

为什么用到递推?

    由于韩老师已经指明这题使用递推进行解决,所以......我觉得这种问题以我目前所学应该还有循环语句可以解这道题,考虑过用循环语句。

使用递推方法为什么想使用两个形参?

    因为这道题中有两个变量,一个是天数一个是桃数,这两个变量不能在peach方法中定义,因为这个方法是要不断重复使用的,如果在peach方法中定义,就会不断重新被定义,导致无法递推天数和桃数

第18行的 num = (peach(day + 1,num) + 1) * 2;中, (peach(day + 1,num) + 1) * 2思路从何而来?

    来自题目猴子吃桃的规律,使用逆向思维得出当天与后一天桃数的关系,有了这个关系,就可以写出递推式。peach方法通过不断调用自己,实现num的迭代传递。


        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值