Python基础之递归函数

什么是递归函数?
递归(recursion):
1.是一个函数
2.函数执行的过程中,自己调用自己
3.递归一定有结束调用自己的条件
4.递归效率不高
5.什么问题必须用递归?汉诺塔
6.不会死循环,有最大递归次数限制,会报错 RecursionError: maximum recursion depth exceeded while calling a Python object

So,知道了什么是递归函数,直接上代码看例子,以斐波那契数列(Fibonacci sequence)为例:
1 1 2 3 5 8 13 21 34
前两项为1,后面每一项的值为其前两项值的和
使用非递归算法求fib数列中第n项的值:

def fib1(n):
    n1 = 1
    n2 = 1
    for i in range(n-2):
        n1,n2 = n2,n1+n2
    return n2

print(fib1(7))

在这里插入图片描述
使用递归算法求fib数列中第n项的值:

def fib2(n):
    if n == 1 or n == 2:
        return 1
    else:
        return fib2(n-2)+fib2(n-1)

print(fib2(7))

在这里插入图片描述

刚接触递归可能很难理解,可能看不懂代码的实现逻辑,建议使用3次调用,来分析递归调用的过程。
以fib2(4)为例

fib2(4)-->
fib2(3)+fib2(2) -->fib2(3)=fib2(2)+fib2(1),fib2(2)=1-->
fib2(2)+fib2(1)+1-->fib2(2)=1,fib2(1)=1-->
fib2(4) = (fib2(2)+fib2(1))+fib2(2)=1+1+1 = 3 

注:
递归的效率不高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值