经典算法题03-猴子吃桃

来源:互联网 发布:linux修改用户组 编辑:程序博客网 时间:2024/05/27 09:46

问题描述:

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个。第二天早上又将剩下的桃子吃了一半,还是不过瘾又多吃了一个。以后每天都吃前一天剩下的一半再加一个。到第10天刚好剩一个。问猴子第一天摘了多少个桃子?

分析:
这是一套非常经典的算法题,这个题目体现了算法思想中的递推思想,递归有两种形式,顺推和逆推,针对递推,只要

    我们找到递推公式,问题就迎刃而解了。           令S10=1,容易看出 S9=2(S10+1), 简化一下              S9=2S10+2             S8=2S9+2                 .....             Sn=2Sn+1+2

遥想公瑾当年,老师说递归是最简洁,最容易理解的,好,就用递归试一下:

    public static void main(String[] args) throws IOException {        int sum = a(1);        int s = b(1, 1);        System.out.println("sum:" + sum);        System.out.println("s:" + s);    }    private static int b(int i, int j) {        if (i == 10) {            return j;        }        return b(i + 1, 2 * j + 2);    }    public static int a(int day) {        if (day == 10) {            return 1;        }        return 2 * a(day + 1) + 2;    }

这里写图片描述

这样就用顺序递归和尾递归完成了计算。

0 0
原创粉丝点击