Aby napisać równoważną metodę za pomocą iteracji, musimy jawnie użyć stosu. Fakt, że wersja iteracyjna wymaga stosu do rozwiązania, wskazuje, że problem jest na tyle trudny, że może skorzystać na rekursji. Zgodnie z ogólną zasadą rekurencja jest najbardziej odpowiednia w przypadku problemów, których nie można rozwiązać przy użyciu określonej ilości pamięci, a co za tym idzie, gdy są rozwiązywane iteracyjnie, wymagają stosu. To powiedziawszy, rekurencja i iteracja mogą dawać ten sam wynik, ale podążają za innym wzorcem. Aby zdecydować, która metoda działa lepiej, należy w każdym przypadku, a najlepszą praktyką jest wybór na podstawie wzorca, za którym podąża problem.
Na przykład, aby znaleźć n-tą liczbę trójkątną sekwencji trójkątnej: 1 3 6 10 15… Program, który używa iteracyjnego algorytmu do znalezienia n-tej liczby trójkątnej:
Korzystanie z algorytmu iteracyjnego:
//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
Korzystanie z algorytmu rekurencyjnego:
//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
vsiteration
?iteration = for loop
Myślę.