有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java难以理解递归

  public static int fun(int n) {
    if (n<=1) return 1;
    else return (n + fun(n-1));   
  }

为什么fun(6)返回21

我是如何将递归可视化的,如下所示:

6 + 5 = 11
5 + 4 = 9
4 + 3 = 7
3 + 2 = 5
2 + 1 = 3
1       1
11 + 9 + 7 + 5 + 3 + 1 = 36

有人能给我解释一下这里发生了什么事吗

--edit删除了System.out.println(),在我发布代码时忘记删除它

我自己尝试了以下方法:

public static int fun(int n) {
    if (n==1) return 2;
    else return 2 * fun(n-1);   
}

2 * fun(4)
2 * (2 * fun(3))
2 * (2 * (2 * fun(2)))
2 * (2 * (2 * (2 * fun(1))))
2 * 2 * 2 * 2 * 2 = 32

这是可视化的正确方式吗


共 (3) 个答案

  1. # 1 楼答案

    fun(6) = 6 + fun(5)
           = 6 + 5 + fun(4)
           = 6 + 5 + 4 + fun(3)
           ...
           = 6 + 5 + 4 + 3 + 2 + 1 = 21
    
  2. # 2 楼答案

    我认为将其想象为:

    fun(6) =
    6 + fun(5) =
    6 + 5 + fun(4) =
    ...
    6 + 5 + 4 + 3 + 2 + 1 =
    21
    

    基本上,每个递归调用都会使我们离终止更近一步(n<;=1)。只有在达到终止条件后,才能计算最终结果

  3. # 3 楼答案

    第一行“System.out.println(n++(n-1))仅显示变量“n”的值,不包含任何算术运算

    此功能的步骤:

    6>;1所以:6+乐趣(5)

    5>;1所以:6+5+乐趣(4)

    4>;1所以:6+5+4+乐趣(3)

    3>;1所以:6+5+4+3+乐趣(2)

    2>;1所以:6+5+4+3+2+乐趣(1)

    1>=1所以:6+5+4+3+2+1

    和之和:6+5+4+3+2+1=21

    我希望我的解释对你有用