这是我使用递归的阶乘代码。
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/