有关递归算法的小故事

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

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

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

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

使用递归的注意事项

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

栈溢出错误:

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

解决栈溢出的办法:

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

关于栈溢出例子:

1
2
3
4
5
6
7
8
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))
说到递归就要说下逆向思维,在大部分情况下,人们所想的是都是片面,也就是有局限性。逆向思维就是突破这个局限性,从另一方面去想怎么解决这个事情。

逆向思维小故事

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

递归求和

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

阶乘

1
2
3
4
5
6
7
def ride_func(n):
#设定出口,退出条件
if n <= 1:
return 1
#调用自身,每次和自身-1相乘
return n + ride_func(n-1)
print(ride_func(5))

评论





载入天数...载入时分秒...

Blog content follows the Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) License

Use WZH as theme, total visits times