有关递归算法的小故事
从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?…
什么是函数嵌套调用?什么是递归?
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) def sum_digui_func(n): if n <= 0: return 0 return n + sum_digui_func(n-1)
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 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 return n + ride_func(n-1) print(ride_func(5))
|