有关递归算法的小故事
从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?..
什么是函数嵌套调用?什么是递归?
函数内部是可以调用其他函数的,这种调用就是函数的嵌套调用。
递归就是'函数在内部直接或间接调用自己本身'。
使用递归的注意事项
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))