有人可以向我解释这个功能是如何工作的吗? (递归)

时间:2015-08-31 13:08:54

标签: java recursion

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。 这种方法有什么作用?

2 个答案:

答案 0 :(得分: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为了理解递归,你必须先了解递归 双关语。

答案 1 :(得分:1)

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

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

这是非常基本的东西,你应该阅读一些计算机科学入门书中的递归。