【问题标题】:Could someone explain to me how this function works? (recursion)有人可以向我解释这个功能是如何工作的吗? (递归)
【发布时间】:2015-11-25 12:53:10
【问题描述】:
public static void main(string[]args) {
    system.out.println(sum5(10));
}
public static void sum5(int n) {
    if (n == 0) return 0;
    return sum5(n - 1) + n;
}

这个函数的结果是 55。 这个方法效果如何?

【问题讨论】:

  • 你懂递归吗?
  • 我不知道你的代码是做什么的,因为main方法调用了方法sum(),但是你只提供了方法sum5()的代码。
  • 我明白,但我不知道为什么结果是 55
  • 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 55
  • 如果你在调试器中单步调试你的代码,你可以看到每一行代码的作用。

标签: java recursion


【解决方案1】:

基本上这是从 1 到 n 的总和

sum5(3) 基本计算 (3 + 2 + 1)

想想它在电脑上的样子,我会用sum5(3)来做

call sum5(3)
 1. n != 0 thus return sum5(2) + 3
 2. n != 0 thus return sum5(1) + 2
 3. n != 0 thus return sum5(0) + 1
 4. n == 0 thus return 0
 now we go back up
 sum5(1) = sum5(0) + 1 => 1 | sum5(0) = 0 from last step.
 sum5(2) = sum5(1) + 2 => 3 | sum5(1) = 1 from last step.
 sum5(3) = sum5(2) + 3 => 6 | sum5(2) = 3 from last step.

P.S 为了理解递归,你必须首先理解递归 双关语。

【讨论】:

    【解决方案2】:

    在自然语言中,函数返回其参数加上对自身的调用值,参数减少 1 - 其前身的种类。

    这给你 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0 = 55

    这是非常基本的东西,你应该在一些介绍性的计算机科学书籍中阅读递归。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2020-10-11
      相关资源
      最近更新 更多