【剑指Offer】JS实现 斐波那契数列

本文介绍两种实现斐波那契数列的方法:递归方法与非递归方法,并对比了它们的时间与空间复杂度。

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

f(n)=0                     (n=0)

      =1                     (n=1)

      =f(n-1)+f(n-2)   (n>1)

通常采用法一:递归思想,但是递归重复度太高,因此需要进行优化。

<!DOCTYPE html>
<html>
<head>
	<title>Fibonacci</title>
	<meta charset="utf-8"/>
	<script type="text/javascript">
	//第一种方法:递归
	//f(n)=0            (n=0)
	//	  =1            (n=1)
	//	  =f(n-1)+f(n-2)(n>1)
	//时间复杂度为O(2^n),空间复杂度为O(n)
	function Fibonacci(num){
		var Fib;
		if(num == 0){
			Fib = 0;
			return Fib;
		} else if(num == 1){
			Fib = 1;
			return Fib;
		} else {
			Fib = Fibonacci(num-1)+Fibonacci(num-2);
			return Fib;
		}
	}
	console.log("Fib(2) = " + Fibonacci(1));
	console.log("Fib(2) = " + Fibonacci(2));
	console.log("Fib(3) = " + Fibonacci(3));
	console.log("Fib(10) = " + Fibonacci(10)+"-----");

	//第二种方法:非递归
	//记录下每一次计算后的f(n)值,存入res数组里
	//时间复杂度为O(n),空间复杂度为O(n)
	function fb(n){
    var res = [1,1];
    if(n == 1 || n == 2){
        return 1;
    }      
    for(var i=2;i<n;i++){
        res[i] = res[i-1] + res[i-2];
        // console.log("res["+i+"] = "+res[i]);
        // console.log("res["+(i-1)+"] = "+res[i-1]);
        // console.log("res["+(i-2)+"] = "+res[i-2]);
    }
    return res[n-1];
	}
	console.log("非递归:fb(10)=" + fb(10));

	</script>
</head>
<body>

</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值