简单了解递归算法

有关递归算法的小故事

从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?..

什么是函数嵌套调用?什么是递归?

函数内部是可以调用其他函数的,这种调用就是函数的嵌套调用。

递归就是'函数在内部直接或间接调用自己本身'。

使用递归的注意事项

1.必须有明确的退出条件
2.每次进入更深一层递归时,问题规模比上次递归都有所减少
3.递归到一定层次就会出现结果
4.递归效率不高,递归层数过多会导致栈溢出(栈内存不够用)
5.栈溢出默认是1000,但是当递归到998就已经报错了。

栈溢出错误:

栈溢出错误:RecursionError: maximum recursion depth exceeded in comparison

解决栈溢出的办法:

#修改递归深度的值
import sys
sys.setrecursionlimit(2000)

关于栈溢出例子:

import sys
sys.setrecursionlimit(2000) #设置最大递归深度是2000
def sum_digui_func(n):
    if n <= 0:
        return 0
    return n + sum_digui_func(n-1)
#当我们运行到1997是,还是可以运行的。到1998就报错,所以可以认为比设置最大递归深度-3就是可以运行的。
print(sum_digui_func(1997)) 

说到递归就要说下逆向思维,在大部分情况下,人们所想的是都是片面,也就是有局限性。逆向思维就是突破这个局限性,从另一方面去想怎么解决这个事情。

逆向思维小故事

关于司马光砸缸:
    讲述了司马光砸坏水缸,救出同伴的古诗。
    在大部分情况下的人,当时所想的是如何让人脱离水,从而救出人。
    我们通过逆向思维,想到也可以使水脱离人,从而脱救,于是把水缸砸坏,使水流光从而进行救助。

递归求和

def sum_func(n):
    #设定出口,退出条件
    if n <= 0:
        return 0
        #调用自身,每次和自身-1相加
    return n + sum_func(n-1)
print(sum_func(5))

递归阶乘

def ride_func(n):
    #设定出口,退出条件
    if n <= 1:
        return 1
        #调用自身,每次和自身-1相乘
    return n + ride_func(n-1)
print(ride_func(5))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值