【 递归、二分查找、列表查找】

递归

概念:

  函数直接或者间接的调用自身算法的过程,则该函数称为递归函数。在计算机编写程序中,递归算法对解决一大类问题是十分有效的。

特点:

  ①递归就是在过程或者函数里调用自身

  ②在使用递归策略时,必须有一个明显的结束条件,称为递归出口。问题规模相比上次递归有所减少,

  ③递归算法解题通常显得很简洁,但递归算法解题的效率较低。所以一般不倡导使用递归算法设计程序。

  ④在递归调用的过程当中系统的每一层的返回点、局部变量等开辟了栈来存储。递归函数次数过多容易造成栈溢出等。

  所以一般不倡导用递归算法设计程序。

要求:

递归算法所体现的"重复"一般有三个条件:

  ①每次在调用规模上都有所缩小(通常是减半)。

  ②相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。

  ③在问题的规模极小时必须用直接解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),

无条件的递归调用将会成为死循环而不能正常结束。

分析以下函数的执行过程:

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))
斐波那契数列

相关文章: