简单的递归示例 – 请帮助我理解递归

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 

有人可以解释一下,因为你我可以很失落!

你解释它有点不对劲。 它更像是这样的:

三(5)= 3 +三(4)
三(4)= 3 +三(3)
三(3)= 3 +三(2)
三(2)= 3 +三(1)
三(1)= 3 +三(0)
三(0)= 0

现在想象triple(0)triple(1)等都是个体变量,并通过逐步解决triple(5)

所以它不会一直工作到零(通过减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 

它正在做的是从每个枚举中减去一个,然后在现在的0-5中加3

您的输出应如下所示:

 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)会打印出消息之前调用triple(n-1)。 因此,您的三(5)条消息将最后打印出来。

当执行到达该点时,三重方法从开始再次开始执行。 一旦它返回,执行将在下一行继续。 这是递归发生的。

所以执行顺序如下:

  1. if(n == 0)// n == 5此时,条件为假
  2. 总= 3 +三(n-1)//我们必须计算三(4)
  3. if(n == 0)// n == 4 now。
  4. 总= 3 +三(n-1)//我们必须计算三(3)
  5. …等,直到n == 0:
  6. if(n == 0)//真!
  7. return 0 //返回0
  8. total = 3 + 0 // 0来自triple(n-1),它刚刚返回0
  9. 的System.out.println(总); //打印3
  10. 返回总数; //返回3
  11. 总数= 3 + 3; //再来3来自三联(n-1),其中n == 2
  12. 的System.out.println(总); //这次打印6
  13. … 等等。

请注意,定义的函数只是将输入乘以3,并在每个倍数处打印结果。

 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)返回自己的值,然后将其计算到它上面的调用中。

再次感谢!

 triple(0) = 0 triple(1) = 3 + triple(0) ie 3+0=3 triple(2) = 3 + triple(1) ie 3+3=6 triple(3) = 3 + triple(2) ie 3+6=9 triple(4) = 3 + triple(3) ie 3+9=12 triple(5) = 3 + triple(4) ie 3+12=15