所以我要在类里面复习递归,但我似乎无法理解它。有什么建议可以帮助描述这个过程吗?
来 self 正在做的样本测试:
class Q4
{
public static void main(String[] args)
{
f(3);
}
public static void f(int x)
{
if (x > 0)
{
System.out.println(x);
f(x-1);
System.out.println(x);
f(x-1);
}
System.out.println("bert");
}
}
我看到了输出,但我不明白为什么它是输出。 谢谢
最佳答案
思考递归的一个好方法是从基本情况开始,然后看看当您一次一个地应用递归步骤时会发生什么。
基本情况:f(0)
这里的基本情况是 x <= 0
. f(0)
的输出是什么?我们可以立即看到这一点,因为 if
永远不会输入语句。基本情况输出是:
bert
递归步骤:f(1)
现在让我们看看 f(1)
会发生什么.当x
是 1 代码输入 if
语句并最终调用 f(0)
两次。如果你替换 1
对于 x
在函数体中,您会看到执行了以下语句:
System.out.println(1);
f(0);
System.out.println(1);
f(0);
System.out.println("bert");
很明显 println
是什么语句可以,但是两个 f(0)
呢?电话?好吧,我们知道什么f(0)
打印是因为我们已经分析了基本情况。 f(0)
版画 bert
.所以上面几行的输出是:
1 // System.out.println(1);
bert // f(0);
1 // System.out.println(1);
bert // f(0);
bert // System.out.println("bert");
递归步骤:f(2)
如果您对 f(2)
应用相同的分析,你会看到它执行:
System.out.println(2);
f(1);
System.out.println(2);
f(1);
System.out.println("bert");
如果我们代入 f(1)
的输出在f(1)
的两个地方被调用,我们得到:
2 // System.out.println(2);
1 // f(1);
bert
1
bert
bert
2 // System.out.println(2);
1 // f(1);
bert
1
bert
bert
bert // System.out.println("bert");
递归步骤:f(3)
最后,f(3)
执行:
System.out.println(3);
f(2);
System.out.println(3);
f(2);
System.out.println("bert");
代入 f(2)
的输出,我们得到:
3 // System.out.println(3);
2 // f(2);
1
bert
1
bert
bert
2
1
bert
1
bert
bert
bert
3 // System.out.println(3);
2 // f(2);
1
bert
1
bert
bert
2
1
bert
1
bert
bert
bert
bert // System.out.println("bert");
关于java - 有人可以帮助我理解递归吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20500550/