python递归函数实现斐波那契_python_递归_斐波那契

什么是递归算法?

-- 函数自己调用自己本身

-- 本质上return返回的时候,总是把一个参数传入到自己函数本身,让函数反复调用下去

递归有何特点?

-- 必有一个结束条件

没有结束条件,递归就没有任何意义,python中默认只能999层递归

递归过多栈溢出,报错

-- 效率不高

相对而言,对于正向递归,递归次数和循环次数一致,没有区别

对于逆向递归,要递归到最后才能得到确定的值,然后从最底层返回

一次是递归到结束值,一次从结束值返回到初始值

--

如何正向递归实现斐波那契数列?

#!/usr/bin/python3

__author__ = 'beimenchuixue'

__blog__ = 'http://www.cnblogs.com/2bjiujiu/'

list_fab = [1, 1] # 定义接收值的列表

def fab(u, n_1, n_2): # u表示获取几个fab值

n_3 = n_1 + n_2 # n_3 每次都等于前面两个数之和

print(n_1, n_2, n_3) # 打印每次递归这3个值

list_fab.append(n_3) # 把每次递归得到的n_3值添加列表中

if u == 1: # 设置结束条件,把列表返回回去,本质上也是递归深度

return n_3 # 返回最后一个值

return fab(u-1, n_2, n_3) # 本质上还是实现了往后移一位,递归深度为u

if __name__ == '__main__':

result = fab(10, 1, 1) # 传入初始值

print(result) # 本质上就包含初始值1,1 ,list_fab中有u+2个值,但是添加进去只有u个值

print(list_fab) # 打印结果

如何逆向递归实现斐波那契数列?

#!/usr/bin/python3

__author__ = 'beimenchuixue'

__blog__ = 'http://www.cnblogs.com/2bjiujiu/'

list_fab = [] # 定义接收值的列表

def fab(n_3, n_2):

n_1 = n_3 - n_2 # n_1 每次都等于 n_3 - n_2

print(n_1, n_2, n_3) # 打印每次递归这3个值

list_fab.insert(0, n_1) # 把每次递归得到的n_1值添加列表中最前面

if n_1 == 1: # 设置递归结束返回条件

return 1 # 返回最后一个值

return fab(n_2, n_1) # 本质上实现了 n_2 = n_3 , n_1 = n_2,逆向移动了一位

if __name__ == '__main__':

result = fab(144, 89) # 传入初始值

print(result) # 打印递归最后返回的参数

print(list_fab)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值