public static int triple(int n)
{
if (n == 0)
return 0;
else
total = 3 + triple(n-1);
System.out.println(total);
return total;
}
好的,所以我有一个简单的回忆示例,我似乎无法掌握,我希望有人能够让我逐步了解程序如何获得其输出。
这是我认为会发生的事情。让我们说n=5
所以,程序循环并点击total = 3 + triple(5-1)
我认为这将等于7 ..这是错误的
程序打印
3
6
9
12个
15个
所以...然后我认为三重必须在打印总数之前再次运行...我相信它确实如此但我根本不理解它总是如何达到它的总和。
因为它看起来像这样:
3 + triple(4)
3 + triple(3)
3 + triple(2)
3 + triple(1)
=3
有人可以解释一下,因为我可能会非常迷失!
答案 0 :(得分:6)
你的解释有点不对劲。它更像是这样:
triple(5) = 3 + triple(4) triple(4) = 3 + triple(3) triple(3) = 3 + triple(2) triple(2) = 3 + triple(1) triple(1) = 3 + triple(0) triple(0) = 0
现在假设triple(0)
,triple(1)
等都是个别变量,并通过逐步解决triple(5)
来解决。
答案 1 :(得分:1)
所以它不会工作到零(通过减1)然后再加3(0 3 6等)。
这是我得到的输出:
n:5
n:4
n:3
n:2
n:1
n:0
total:3
total:6
total:9
total:12
total:15
它正在做的是从每个枚举中减去一个,然后将3添加到现在的0-5
答案 2 :(得分:1)
您的输出应如下所示:
3 = triple(1) = 3+triple(0)
6 = triple(2) = 3+triple(1)
9 = triple(3) = 3+triple(2)
12 = triple(4) = 3+triple(3)
15 = triple(5) = 3+triple(4)
这是因为triple(n)会在打印出消息之前调用三(n-1)。因此,您的三(5)条消息将最后打印出来。
答案 3 :(得分:0)
当执行命中该点,三重方法开始从开始再次执行。一旦它返回,执行将在下一行继续。这发生递归。
因此执行顺序如下:
注意定义的函数只是将输入乘以3,并在每个倍数打印结果。
答案 4 :(得分:0)
public static int triple(int n)
{
if (n == 0)
return 0;
else
return 3 + triple(n-1);
System.out.println(return);
}
忽略println(返回)仅用于理解目的。这就是我如何分解它以最终掌握递归函数/方法。
triple(3)
return 3 + triple(3-1)_is_6<---- (return = 9)<--
println(return)
triple(2)
return 3 + triple(2-1)_is_3<-- (return = 6)<----
println(return);
triple(1)
return 3 + triple(1-1)_is_0<---- (return = 3)<--
println(return)
triple(0)
return 0; is 0 (return = 0)<----
(no println for n==0)
谢谢大家帮助理解这一点。我没做的就是记住每个三元组(n-1)返回自己的值,然后将其计算到它上面的调用中。
再次感谢!
答案 5 :(得分:0)
triple(0) = 0
triple(1) = 3 + triple(0) i.e. 3+0=3
triple(2) = 3 + triple(1) i.e. 3+3=6
triple(3) = 3 + triple(2) i.e. 3+6=9
triple(4) = 3 + triple(3) i.e. 3+9=12
triple(5) = 3 + triple(4) i.e. 3+12=15
答案 6 :(得分:0)
您对Triple(n-1)和(n-1)之间感到困惑。它们是不同的东西,因此您不能只将值分配给三元组(n-1)内的n并将其加到3