无法理解递归输出

时间:2019-05-02 20:18:22

标签: java recursion

我不理解以下递归代码。

  int func(int num){
  if(num == 1){

   return 1;   
    }
    else{

    return (func(num-1) + num));
   }
 }
public static void main(String[] args) {

System.out.println(func(100));

 }

所以输出是5050。 我不明白为什么会这样。有人可以向我解释代码的工作原理吗?

2 个答案:

答案 0 :(得分:0)

好的,所以让我们从头开始逐步分析代码的行为:

首先,您呼叫func(100)

  1. 100不同于1,因此第一个'if'被跳过,函数“ func(100)”返回 100 + func(99)

  2. 99不同于1,因此第一个'if'被跳过,函数“ func(99)”返回 99 + func(98)

    因此,当下“ func(100)”返回100 + 99 + func(98)

  3. 对于func(97)直到func(2),与之前相同的步骤

    因此您的函数“ func(100)”将返回100 + 99 + 98 + 97 + ..... + 2 + func(1)

  4. func(1)'if'这次不会被忽略,因此func(1)返回1

  5. 现在您具有func(100)= 100 + 99 + 98 + ..... + 2 +1,它是前100个正整数的总和,即5050

答案 1 :(得分:0)

让我们再次使用3。在每一行中添加system.out。

问题是当函数调用发生时,当前函数执行将停止,直到新函数结束并给出其结果为止。 这是程序堆栈:等待子功能终止的功能的列表。

使用您提供的代码,您将获得100个“ func”调用的堆栈,然后最后一个调用包含num == 1,因为您将其乘以99乘以100。

此后,将返回所有100个函数,每个函数都加上+ num。