Превращение итерации в рекурсию - PullRequest
0 голосов
/ 06 мая 2018

Добрый день!

Я только что написал код как итерацию, которая должна суммировать четные числа от 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 голосов
/ 06 мая 2018

Сумма чисел равна сумме этого числа плюс сумма чисел минус 2. Записано в коде:

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

Нет необходимости говорить, что рекурсия в этой форме не является необходимой, и создаст StackoverflowException, когда y действительно большое число. Некоторые языки позволяют вам написать рекурсивную функцию и указать, что это хвостовая рекурсия , так что компилятор фактически преобразует ее в итерацию.

...