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

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

先上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的实现是基于动态规划的,自底向上,充分利用了上一次的计算结果。性能上相差很大。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值