递归(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))