java斐波那契 递归_java – 递归与迭代(Fibonacci序列)

我有两种不同的方法,一种是使用迭代计算Fibonacci序列到第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, fibIteration(n));

System.out.printf("Time: %d ms

", 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, fibRecursion(n));

System.out.printf("Time: %d ms

", 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

我真正想知道的是为什么突然迭代变得更快并且递归变得更慢.如果我错过了这个问题的一些明显答案,我很抱歉,但我仍然是编程的新手,我真的不明白背后会发生什么,我想知道.请提供一个很好的解释或指出我正确的方向,以便我自己找到答案.另外,如果这不是一个测试哪种方法更快的好方法让我知道并建议我不同的方法.

提前致谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值