我刚刚接触到递归,并得到了以下代码行:
public class RecursionThree
{
public void run(int x )
{
if(x<5)
run(x+1);
out.println(x);
}
public static void main(String args[] )
{
RecursionThree test = new RecursionThree ();
test.run(1);
}
}
输出应该是: 5 4 3 2 1。我明白为什么它会打印 5 (因为 5<5 等于 false 并且它会打印 x,即 5)。但是,我不明白为什么它也打印 4 3 2 1 。感谢您的帮助
最佳答案
递归的工作原理是分解基本情况并向后构建。就你而言。您的基本情况是x>=5
,在该点它将停止扩展递归树,您可以将基本情况视为树或叶子的末端。之后,它会返回完成调用 run 后要做的事情。所以在你的情况下,每次调用 1 后,它都会打印出 x。
当x=1时,调用run(2)
,run(2)
解析后,会转到下一行。 run(2) 之后,打印输出为 5 4 3 2,之后它将打印出 x 返回到 run(1)
的原始调用,即 1
。这对于遍历树木等以及许多其他问题来说确实很棒。
当你调用 run(1) 时想象它
run(1)
1<5
run(2)
2<5
run(3)
3<5
run(4)
4<5
run(5)
print(5)
print(4)
print(3)
print(2)
print(1)
如您所见,它转到基本案例,然后备份。
要更熟悉递归,您可以做一些问题,例如查找数组中最大的 int,方法头为 public int findLargest(int [] array, int someNumber)
您可以使用 someNumber 来表示您认为需要的任何内容。或者使用递归和一个参数来反转字符串。
关于java - 递归输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35834665/