递归方法|斐波那契数列

本文介绍了使用递归方法计算斐波那契数列的两种Python实现,分别是通过不断追加数组元素和预先设定数组大小再依次计算。并展示了这两种方法的运行结果和效率对比。

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

递归方法:

将问题简化,一步一步,一笔一笔、直到得到可以解决的,可以下手的一步。最终化为简单问题。

可直接或间接调用自身: 

直接或间接调用sum()自身:

python:

In[1]

def listsum(a):  

    if len(a) == 1:        

     return a[0] #如果列表中只有一位元素,则返回a[0]   

   else:          

     return a[0] + listsum(a[1:]) #返回第一位元素于剩余其他元素的和

print(listsum([1,3,5,7,9,13]))

Out[2]:

38

斐波那契数列简介:


斐波那契数列,又称‘兔子数列/黄金分割数列’。

特性一:
任一个数都是前两个数之和。

例如:


因此第一种计算斐波那契数列的方法,即让数字序列的最后两个元素相加,得到新的数字并插入数列结尾。

特性二:
在极限条件下,相邻两个元素的商等于一个常数。即


第一种:
因此我们可以通过设置一个数组。

a = [0,1]

下一个要插入的数据就为“a【-1】+a【-2】”。

a.append(a[-1] + a[-2])

继续循环。循环y次就得到了y个新数字。

最后所得到的斐波那契数列中数字的个数为 n = y + 2 。

可以根据用户想要的斐波那契数字的个数n来定义循环次数y。

y = n - 2

输入【1】:

def fibs1(n): #定义斐波那契函数    a = [0] #声明a为数组    if n <= 0:        print('错误') #n 不能 <= 0    else:        if n > 1:            a = [0,1]            for i in range(n - 2): #执行n-2次循环,即向数组a中新增n-2个斐波那契数字                a.append(a[-2] + a[-1]) #新增数字 = 最后两个数字的和    return a

输入【2】:

fibs1(10)

输出【2】:

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

第二种:
提前定义好数组中元素的个数,再依次设定每个值为前两个数的和。

输入【1】:

def fibs2(n): #n为需要的斐波那契数字个数    f = [0] * n #定义包含n个0的数组    if n <= 0:        print('错误') #n 不能 <= 0    else:       if n >= 2:            f[1] =1 #此时f = [0 , 1]            for i in range(2,n):                f[i] = f[i - 1] +f[i-2]            '''            f[2] = f[1] + f[0] = 1,此时f = [0,1,1];三个斐波那契数字            f[3] = f[2] + f[1] = 2,此时f = [0,1,1,2];四个斐波那契数字             ......            f[n-1] = f[n-2] + f[n-1];n 个斐波那契数字            '''    return f

输入【2】:

fibs2(10)

输出【2】:

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

两种方法运行时间对比:
输入【1】:

%timeit fibs1(100)%timeit fibs2(100)

输出【1】:

26.2 µs ± 736 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)30.7 µs ± 301 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值