猴子吃桃


/**
 * @Author Peter_S
 * @Date 2018/6/7
 */
public class Peach {
    /**
     * 猴子第一天摘下若干个桃子,
     * 当即吃了一半,还不过瘾就多吃了一个。
     * 第二天早上又将剩下的桃子吃了一半,
     * 还是不过瘾又多吃了一个。
     * 以后每天都吃前一天剩下的一半再加一个。
     * 到第10天刚好剩一个。问猴子第一天摘了多少个桃子?
     *
     */
    public static void main(String[] args) {
//        System.out.println(peschs2(1,10));
//        System.out.println(peschs3(1));
        System.out.println(peschs4(1,1));
    }

    /**
     * 这个方法有问题,根据debug和Java堆栈原理,先是一步步算出来第几天剩余多少桃子
     * 然后返回的时候,倒着又把桃子数量返回去,直到返回第一个,也就是第二天的数量,
     * 目前还不知道剩余的返回去哪里了,尴尬尴尬
     *
     * 应该是返回数据了,但是又被后来返回的数据覆盖了。。。。
     *
     * @param number 桃子数量
     * @param days 第几天
     * @return
     */
    public static Integer peschs1(int number, int days){
        days=days-1;
        number = 2*(number+1);
        if (days>1){
            peschs1(number,days);
        }
        return number;
    }

    /**
     * 这个方法根据作者的思路把迭代条件放入return里面,这个结果是对的,但是但是dubug出来返回的
     * 应该是第二天的数量,这直接感觉和方法1冲突啊。。。。。。
     *
     * 有一个想法,最后返回的是peschs(766,2)的结果。而他的结果导致days=1,返回1534;
     * 也就是peschs(766,2)没有导致迭代而是返回了一个数字。所以迭代结束。
     *
     * @param number 桃子数量
     * @param days 第几天
     * @return
     */
    public static Integer peschs2(int number, int days){
        days = days-1;
        number = 2*(number+1);
        if (days <= 1){
            return number;
        }
        return peschs2(number,days);
    }

    /**
     * 这个是作者的方法,利用栈的原理,很巧妙,大家自己看
     * @param days 天数
     * @return
     */
    public static Integer peschs3( int days){
        if (days == 10){
            return  1;
        }
        return 2*peschs3(days+1)+2;
    }

    /**
     * 作者的。。。。
     * @param days 天数 (我个人更建议把这样写if(days == 1)更符合要求,页更容易理解)
     * @param number 数量
     * @return
     */

    public static Integer peschs4( int days,int number){
        if (days == 10){
            return  number;
        }
        return peschs4(days+1,2*number+2);
    }
}

这是一个很简单的递归问题,具体推理就不给大家写了,

http://www.cnblogs.com/huangxincheng/archive/2012/08/08/2628022.html

这是我参考的原作者,他写了很多,还讲了“线性递归”和“尾递归”,没有深入掌握,我页没有写,大家真的可以去看看,很不错的

结果差点忘了。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值