У меня есть два разных метода: один вычисляет последовательность Фибоначчи в n-й элемент, используя итерацию, а другой делает то же самое, используя рекурсивный метод.
Пример программы выглядит следующим образом:
import java.util.Scanner;
public class recursionVsIteration {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//nth element input
System.out.print("Enter the last element of Fibonacci sequence: ");
int n = sc.nextInt();
//Print out iteration method
System.out.println("Fibonacci iteration:");
long start = System.currentTimeMillis();
System.out.printf("Fibonacci sequence(element at index %d) = %d \n", n, fibIteration(n));
System.out.printf("Time: %d ms\n", System.currentTimeMillis() - start);
//Print out recursive method
System.out.println("Fibonacci recursion:");
start = System.currentTimeMillis();
System.out.printf("Fibonacci sequence(element at index %d) = %d \n", n, fibRecursion(n));
System.out.printf("Time: %d ms\n", System.currentTimeMillis() - start);
}
//Iteration method
static int fibIteration(int n) {
int x = 0, y = 1, z = 1;
for (int i = 0; i < n; i++) {
x = y;
y = z;
z = x + y;
}
return x;
}
//Recursive method
static int fibRecursion(int n) {
if ((n == 1) || (n == 0)) {
return n;
}
return fibRecursion(n - 1) + fibRecursion(n - 2);
}
}
Я пытался выяснить, какой метод работает быстрее. Я пришел к выводу, что рекурсия быстрее для меньшего количества чисел, но по мере увеличения значения n-го элемента рекурсия становится медленнее, и итерация становится быстрее. Вот три разных результата для трех разных n:
Пример # 1 (n = 10)
Enter the last element of Fibonacci sequence: 10
Fibonacci iteration:
Fibonacci sequence(element at index 10) = 55
Time: 5 ms
Fibonacci recursion:
Fibonacci sequence(element at index 10) = 55
Time: 0 ms
Пример # 2 (n = 20)
Enter the last element of Fibonacci sequence: 20
Fibonacci iteration:
Fibonacci sequence(element at index 20) = 6765
Time: 4 ms
Fibonacci recursion:
Fibonacci sequence(element at index 20) = 6765
Time: 2 ms
Пример # 3 (n = 30)
Enter the last element of Fibonacci sequence: 30
Fibonacci iteration:
Fibonacci sequence(element at index 30) = 832040
Time: 4 ms
Fibonacci recursion:
Fibonacci sequence(element at index 30) = 832040
Time: 15 ms
Я действительно хочу знать, почему внезапная итерация стала быстрее, и рекурсия стала медленнее. Извините, если я пропустил какой-то очевидный ответ на этот вопрос, но я все еще новичок в программировании, я действительно не понимаю, что происходит за этим, и я хотел бы знать. Просьба дать хорошее объяснение или указать мне в правильном направлении, чтобы я мог сам найти ответ. Кроме того, если это не лучший способ проверить, какой метод быстрее, дайте мне знать и предложите мне другой метод.
Спасибо заранее!