java - 递归的逻辑是什么

标签 java recursion

这是我使用递归的阶乘代码。

class Factorial
{
    public static void main(String args[])
    {
       Factorial f = new Factorial();
       System.out.println(f.fact(Integer.parseInt(args[0])));
    }

    private int fact(int num)
    {
        int result;
        if(num == 1)
             return 1;

        result = fact(num - 1) * num;
        return result;
    }
}

现在要运行这个程序,我这样做了

D:\>java Factorial 3

现在按照进入fact函数时的逻辑,其中num = 3,所以会跳到

result = fact(num - 1) * num;

这里会变成

result = fact(3 - 1) * num;

结果=事实(2) * num;

在这一步中,我有点困惑它是否执行整个步骤,即

result = fact(num - 1) * num;

或者只是事实(num - 1)

按照逻辑,它应该做的是调用fact函数。因此,程序的控制再次到达事实函数的开头,其中 num = 2。它将再次跳到

result = fact(num - 1) * num;

所以,它会变成

result = fact(2 - 1) * num;

结果=事实(1) * num;

现在,它应该再次调用事实函数,而不执行整个语法,并再次到达事实方法的开头,其中 num = 1。这次将匹配 num == 1,并将返回 1。现在它将返回到

result = fact(num - 1) * num;

所以,它会变成

result = fact(1 - 1) * num;

结果=事实(0) * num;

接下来会发生什么?

我走对了吗?如果不是,修正是什么?

我不太清楚这个递归程序的流程。

最佳答案

So, it will become

result = fact(1 - 1) * num;

不。对于num = 2

result = fact(num - 1) * num;

变成了

result = 1 * num; // i.e. 1 * 2

fact 返回一个值,这意味着整个调用必须替换为该值。
不知道为什么您会认为 num 发生根本变化。您的代码中没有 num = ...

关于java - 递归的逻辑是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31848111/

相关文章:

java - 从集合中删除实体时,Hibernate不会删除数据库记录

java - Edittext 文本输入监听器

c++ - 我如何递归地重写这个?

JAVA:帮助修复递归函数

java - 如何在linux下使用google批量上传

java - 如何找到 libgdx 中两个对象之间的距离

Java 实例变量与局部变量

recursion - 查找由列表组成的方阵的对角线

c - 使用参数递归的数字阶乘(如参数列表中的函数调用)

sql - SQL 中带有停止条件的递归 SELECT?