Чтобы написать эквивалентный метод с использованием итерации, мы должны явно использовать стек. Тот факт, что итеративная версия требует для своего решения стека, указывает на то, что проблема достаточно сложна, и для нее может быть полезна рекурсия. Как правило, рекурсия наиболее подходит для задач, которые не могут быть решены с фиксированным объемом памяти и, следовательно, требуют стека при итеративном решении. При этом рекурсия и итерация могут показывать один и тот же результат, хотя они следуют разному шаблону. Чтобы решить, какой метод работает лучше, нужно решать индивидуально, и лучше всего выбирать на основе шаблона, которому следует проблема.
Например, чтобы найти 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
Думаю.