hunter学算法-非递归对于Fibonacci数列求值的优化

本文通过两种不同实现方式对比分析了斐波那契数列的计算效率:一种是基于递归的方法,该方法虽然简洁但计算效率低下;另一种是基于动态规划的方法,这种方法充分利用了之前的计算结果,显著提高了计算速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上code

class Test
{
	public static void main(String args[])
	{
		int n = 45;
		long time1 = now();
		System.out.print("fibonacci("+n+") = " + fibonacci(n) );
		System.out.println("           cost: " + (now() - time1));


		time1 = now();
		System.out.print("fibonacci2("+n+") = "+ fibonacci2(n));
		System.out.println("           cost: " + (now() - time1));
	}

	public static long now(){
		return System.currentTimeMillis();
	}

	public static long fibonacci(int n){
		if(n == 1)
			return 1;
		if(n == 2)
			return 1;
		return fibonacci(n-1)  + fibonacci(n-2);
	}

	public static long fibonacci2(int n){
		long num1 = 1;
		long num2 = 1;
		if(n == 1 || n == 2){
			return 1;
		}

		long numn = 0;
		for(int i =3;i <= n ; i ++){
			numn = num1 + num2;
			num1 = num2;
			num2 = numn;
		}
		return numn;
	}
}

执行结果:


分析:

fibonacci的实现是基于递归的,会有很多重复的计算。每次计算都是一种崭新的计算,没有充分利用之前计算的结果,造成了严重的浪费。

fibonacci2的实现是基于动态规划的,自底向上,充分利用了上一次的计算结果。性能上相差很大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值