为什么对这个递归函数的答案是8?

问题描述

这是一个简单的递归问题,我已经坚持了一段时间。基本上,我了解f(4)如何返回f(3)+ f(3),并且它们将返回f(2)+ f(2)+ f(2)+ f(2)。但是,如果将这些全部加在一起,答案是否会大于8?我是递归的新手,但仍然想围绕这个概念。

public class test{
    
    public static int f(int n){
        if(n <= 1){
            return 1;
        }
        return f(n-1)+f(n-1);
    }
    
    
    public static void main(String[]args){
        System.out.println(f(4));
    }
}

解决方法

让我们从另一个方向来看。

f(1) = 1
f(2) = f(1) + f(1) = 2
f(3) = f(2) + f(2) = 2 + 2 = 4
f(4) = f(3) + f(3) = 4 + 4 = 8

由此,我们可以看到答案是8。如果您希望得到不同的答案,您希望得到什么答案,以及如何得出答案?

,

答案始终是f(n) = 2^(n-1)

f(4) = 2^(4-1) = 2^3 = 8

,

如果将调用分成单独的语句,则更易于查看。

public static void main(String[] args) {
    System.out.println(f(4));
}
    
public static int f(int n) {
    if (n <= 1) {
        return 1;
    }
    int r = f(n - 1);
    int s = f(n - 1);
    System.out.println("(r + s) = " + (r + s));
    return r + s;
}

打印

(r + s) = 2
(r + s) = 2
(r + s) = 4
(r + s) = 2
(r + s) = 2
(r + s) = 4
(r + s) = 8
8

不同的人响应不同的输出,因此您可以使用自己的打印语句进行更改。我通常发现了解任何程序的逻辑流程最有用的方法是简单地在纸上写下每个步骤的状态并以此方式进行操作。