将迭代转换为递归

时间:2018-05-06 13:46:28

标签: java recursion int return iteration

美好的一天!

我刚刚编写了一个代码作为迭代,它应该在0和y之间总结偶数。

我现在坐在我的桌子上大约两个小时,思考如何在递归中编写相同的代码 - 到目前为止没有任何进展。 我在互联网上找到的唯一解释是对一个特定变化的简单重复进行解释 - 不像我的代码包括两个。 ("结果=结果+ x;"和" x = x + 2;") 有人可以向我解释我是如何将这种迭代转换为递归的吗?提前谢谢!

 public class Sum {

   static int method(int y) { 
     int result = 0; 
     for (int x = 2; x<=y;)
     {
        result = result + x;   
        x = x + 2; 
     }
     return result;
   } 

   public static void main(String[ ] args) {
      int result = method(35); 
      System.out.println("Sum of even numbers between 0-35: " +result); 
   }
}

1 个答案:

答案 0 :(得分:2)

这些数字的总和是这个数字的总和加上数字的总数减去2.用代码写的:

int method(int y) { 
  if (y <= 0) {
     return 0;
  } else {
     return y + method(y - 2);
  }
} 

毋庸置疑,这种形式的递归不是必需的,并且当StackoverflowException是一个非常大的数字时会创建y。有些语言允许您编写递归函数并指示它是tail recursion,以便编译器实际将其转换为迭代。