递归(recursion):
1 是一个函数
2 函数执行的过程中自己调用自己
3 递归一定有结束调用自己的条件
4 递归效率不高
5 什么问题必须用递归?汉诺塔
 
递归从逻辑上没有结束调用自己的条件时是会死循环的,但是编译器不会让你出现死循环(递归最大调用深度-985)
 
def print_str(n):
    if n<0:
        return
    print(n)
    print_str(n-1)  #自己调用自己
 
>>> def print_str(n):
...     if n<0:
...         return
...     print(n)
...     print_str(n-1)
...
>>> print_str(10)
10
9
8
7
6
5
4
3
2
1
0
n=10---->print_str(10)
                 print(10)
                 print_str(10-1)----这个时候n变成了9-->print_str(9)
                                                                               print(9)
                                                                               print_str(9-1)--------------->print_str(8)
                                                                                                                             print(8)
                                                                                                                             print_str(8-1)
以此类推。。。。。。
 
 
def print_str(n):
    if n == 0:
        return n
    return n+print_str(n-1)
    
print_str(3):3+print_str(2)(待算)3=6
print_str(2):2+print_str(1)(待算)1=3
print_str(1):1+print_str(0)(待算)0=1
print_str(0):0
 
 
递归就是找规律
 
 
斐波拉契数列:
1,1,2,3,5,8,13 求第七个是13
def fib(n):
    if n==1 or n==2:
        return 1
    a=1
    b=1
    for i in range(n-2):
        temp = a+b
        a=b
        b=temp
    return b
 
 
print(fib(7))
算法:
1 两个数a=1,b=1
2 做个计算a+b(temp)
3 a的值变为b
4 b的值呢变为temp就可以了
5 重复以上过程
 
递归实现:
算法:求第N项=n-1项+n-2项
当n=1 or n=2时,return 1
 
def fib(n):
    if n==1 or n==2:
        return 1
    return fib(n-1)+fib(n-2)
 
print(fib(7))
>>> def fib(n):
...     if n==1 or n==2:
...         return 1
...     return fib(n-1)+fib(n-2)
...
>>> print(fib(7))
13
改进输入7,打印1,1,2,3,5,8,13
def fib(n):
    if n ==1 or n ==2:        
        return 1
    temp=fib(n-1)+fib(n-2)
    return temp
 
for i in range(1,8):
    print(fib(i))
posted on 2019-10-04 20:33  腿短毛不多  阅读(169)  评论(0编辑  收藏  举报