递归

一、解释

递归:在调用一个函数的过程中,直接或间接地调用了函数本身这个就叫递归
注:Python在递归中没有像别的语言对递归进行优化,所以他的每一次调用都会基于上一次的调用进行,并且他设置了最大的递归数量防止递归外溢

二、实例
用递归计算菲波那切数列的和
def fib(n):
    if n < 1:
        print('请输入大于1的整数!')
    if n == 1 or n == 2:
        return 1
    if n > 2:
        return fib(n-1) + fib(n-2)

n = int(input('请输入大于1的正整数:'))
result = fib(n)
print('%d个斐波那契数列的和是%d' % (n,result))
三、优缺点
优点:
(1)定义简单。
(2)逻辑清晰,可读性更好。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
缺点:
(1)递归效率不高,递归中很多计算都是重复的,由于其本质是把一个问题分解成两个或者多个小问题,多个小问题存在相互重叠的部分,则存在重复计算,如fibonacci斐波那契数列的递归实现如果输入50的话,就会计算很长时间,就会不如数学计算的方式了(可以体验一下两个方法计算40个斐波那契数列的和的计算时间)。->效率
(2)调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的栈的容量是有限的,如果这个二叉树很庞大,调用的层次太多时,反复递归函数调用开销就很大,就会超出栈的容量,从而导致栈溢出。->性能

四、附件
数学计算斐波那契数列的和
def feb(n):
    n1 = 1
    n2 = 1
    n3 = 1

    if n < 1:
        print('输入大于零的正整数')
        return -1
    
    while (n-2) > 0:
        n3 = n2 + n1
        n1 = n2
        n2 = n3
        n = n - 1
    return n3

n = int(input('请输入一个大于零的正整数:'))
result = feb(n)
if result != -1:
    print('{0}个斐波那契数列数列的和是{1}'.format(n,result))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值