实现:
1) 分苹果,每次分一半(苹果个数为奇数时舍弃一个),至少多少次分完
2) 阶乘
3) 斐波那契数列

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            int count = half(n);
            System.out.println("at least: " + count);
            System.out.println("factorial: " + factorial(n));
            System.out.println("fibonacci: " + fibonacci(n));
        }
    }

    // 分苹果
    public static int half(int n) {
        if (n == 2 || n == 3)
            return 1;
        else if (n % 2 == 0)
            return 1 + half(n / 2);
        else
            return 1 + half((n - 1) / 2);
    }

    // 阶乘
    public static long factorial(long n) {
        if (n == 1)
            return 1;
        else
            return n * factorial(n - 1);
    }

    // 斐波那契数列
    public static int fibonacci(int n) {
        switch (n) {
        case 0:
            return 0;
        case 1:
            return 1;
        default:
            return fibonacci(n - 1) + fibonacci(n - 2);
        }
    }
View Code

心得:

1. 找出规律得出方程

f(x)=1+f(x/2);f(x)=x*f(x-1);f(x)=f(x-1)+f(x-2)

2. 明确退出条件

3. 返回方程