斐波那契数列

斐波那契数列

描述:
现在要求输入一整数n,请输出斐波那契数列的第n项(从0开始,第0项为0,第1项为1)。n <=39
示例:
输入:4
返回值:3

斐波那契数列是最经典的入门题,它的标准公式是:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2) (n>=3)

递归法

int Fibonacci(int n)
{
	if (n <2)
	{
		return n;
	}
	return Fibonacci(n - 2) + Fibonacci(n - 1);

}

递归法时间复杂度:o(n^2) , 导致内存溢出。
利用for循环

int Fibonacci(int n)
{
	if (n == 0 || n == 1)
		return n;
	int f1 = 0;
	int f2 = 1;
	int f3 =0;
	for (int i = 2; i <= n; i++)
	{
		f3 = f1 + f2;
		f1 = f2;
		f2 = f3;
	}
	return f3;
}

时间复杂度:O(n).
python实现:

dic = {} # 字典
def fib_recur_with_dic(n):
    global dic 
    if n <= 1: 
        return n
    if n in dic: 
        return dic[n]
    else: 
        result = fib_recur_with_dic(n-1) + fib_recur_with_dic(n-2) 
        dic[n] = result 
        return result

优化后:

def fib_loop_nolist(n):
    if n <= 1: # 0,1 直接返回
        return n
    a, b = 0, 1
    for i in range(2, n+1): # 从2开始
        a, b = b, a + b
    return b

在这里插入图片描述

单层循环,时间复杂度为 O(n),与优化后的递归解法复杂度相当。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

newcatowen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值