【 递归、二分查找、列表查找】
递归
概念:
函数直接或者间接的调用自身算法的过程,则该函数称为递归函数。在计算机编写程序中,递归算法对解决一大类问题是十分有效的。
特点:
①递归就是在过程或者函数里调用自身。
②在使用递归策略时,必须有一个明显的结束条件,称为递归出口。问题规模相比上次递归有所减少,
③递归算法解题通常显得很简洁,但递归算法解题的效率较低。所以一般不倡导使用递归算法设计程序。
④在递归调用的过程当中系统的每一层的返回点、局部变量等开辟了栈来存储。递归函数次数过多容易造成栈溢出等。
所以一般不倡导用递归算法设计程序。
要求:
递归算法所体现的"重复"一般有三个条件:
①每次在调用规模上都有所缩小(通常是减半)。
②相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。
③在问题的规模极小时必须用直接解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),
无条件的递归调用将会成为死循环而不能正常结束。
分析以下函数的执行过程:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
def func3(x):
if x>0:
print(x)
func3(x-1)
func3(5)
def func4(x):
if x>0:
func4(x-1)
print(x)
func4(5)
|
根据Python执行的过程,及函数调用去分析执行结果!
关于斐波拉契数列
斐波拉契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368。
特别注意:第0项是0,第1项是第一个1。这个数列从第2项开始,每一项都等于前两项之和。
def fibo(n): before = 0 after = 1 if n == 0 or n == 1: return n if n <= 3: return 1 return fibo(n-1)+fibo(n-2) print(fibo(3))