java - 无法理解递归阶乘

标签 java recursion

我是递归的新手,我很难理解这个递归阶乘函数是如何计算的。

当我尝试在脑海中运行代码时,这就是我想象它的方式:

If number = 4,

1st return: 4 x 3

2nd return: 3 x 2

3rd return: 2 x 1

所以在我看来它是 (4 x 3) * (3 x 2) * (2 x 1) 但显然正确的返回应该是 4 X 3 X 2 X 1。我希望能够理解它是如何得到 4 X 3 X 2 X 1 的。

 public static long factorial(long number) {
        if (number <= 1)
           return 1;
        else
        {
            System.out.println(number + " x " + (number-1) );
           return number * factorial(number - 1);
        }
     }

如有任何帮助和解释,我们将不胜感激。

最佳答案

您的可视化应该是:

If number = 4,

1st return: 4 x (2nd return)

2nd return: 3 x (3rd return)

3rd return: 2 x (4th return)

4th return: 1

然后如预期的那样简化为 4 x 3 x 2 x 1。

基本上,你需要区分“返回值x”和“返回递归的结果,传入值x”。

关于java - 无法理解递归阶乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36099515/

相关文章:

php - 在递归函数 php 中重新启动第一个循环

scala - 如何将功能插入排序代码更改为尾递归

Verilog 中 Always block 内的递归

java 。在 JPanel 上调整大小问题

java - 访问 cpu 寄存器

java - 是否可以将同一个子实例多次添加到 StackLayoutPanel 中?

c - 作业-C程序设计-递归程序

javascript - 如何将 Spring Mvc Controller 5 连接到 jsp 文件?

java - 是否可以在 Java Netbeans 上制作渲染的 jTextArea "format editable"? (使用 Enter 和 Tab 键)

perl - 我的 Fibonacci 子例程是 Perl 中递归的示例吗?