Щоб написати еквівалентний метод за допомогою ітерації, ми повинні явно використовувати стек. Той факт, що ітеративна версія вимагає стеку для її вирішення, вказує на те, що проблема є досить складною, що може отримати користь від рекурсії. Як правило, рекурсія найбільш підходить для проблем, які неможливо вирішити з фіксованим об'ємом пам'яті і, отже, вимагають стека, коли вона ітераційно вирішується. Сказавши це, рекурсія та ітерація можуть показувати однаковий результат, якщо вони дотримуються різної моделі. Щоб вирішити, який метод працює краще, це залежно від конкретного випадку, а найкраща практика полягає у виборі, виходячи з тієї схеми, за якою випливає проблема.
Наприклад, щоб знайти n-е трикутне число трикутної послідовності: 1 3 6 10 15 ... Програма, яка використовує ітераційний алгоритм для знаходження n-го трикутного числа:
Використання ітеративного алгоритму:
//Triangular.java
import java.util.*;
class Triangular {
public static int iterativeTriangular(int n) {
int sum = 0;
for (int i = 1; i <= n; i ++)
sum += i;
return sum;
}
public static void main(String args[]) {
Scanner stdin = new Scanner(System.in);
System.out.print("Please enter a number: ");
int n = stdin.nextInt();
System.out.println("The " + n + "-th triangular number is: " +
iterativeTriangular(n));
}
}//enter code here
Використання рекурсивного алгоритму:
//Triangular.java
import java.util.*;
class Triangular {
public static int recursiveTriangular(int n) {
if (n == 1)
return 1;
return recursiveTriangular(n-1) + n;
}
public static void main(String args[]) {
Scanner stdin = new Scanner(System.in);
System.out.print("Please enter a number: ");
int n = stdin.nextInt();
System.out.println("The " + n + "-th triangular number is: " +
recursiveTriangular(n));
}
}
recursion
протиiteration
?iteration = for loop
Я думаю.