递归
分治思想
递归算法是把问题转化为规模缩小了的同类问题的子问题。
一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数).
python默认设置递归深度100层
可自行设置:
import sys
sys.setrecursionlimit(XXXXXX) #XXXXXX表示层数
递归特性:
1 / 必须有一个明确结束的条件
2 / 每次进入更深一层,问题规模相比上次递归应有所减少
3 / 递归效率不高
范例01:阶层
01,阶乘的实现方法1
>>>
>>> def sum(number):
... result = number
... for i in range(1,number):
... result *=i
... return result
...
>>> temp = sum(5)
>>> print(temp)
120
>>>
02,递归实现阶乘
>>>
>>> def factorial(n):
... if n==1:
... return 1
... else:
... return n*factorial(n-1)
...
>>> temp = factorial(5)
>>> print(temp)
120
>>>
范例02:斐波那契数列
>>>
>>> def fab(n):
... if n <1:
... return -1
... if n==1 or n==2:
... return 1
... else:
... return fab(n-1)+fab(n-2)
...
>>> temp = fab(10)
>>> print(temp)
55
>>> temp = fab(20)
>>> print(temp)
6765
>>>
>>>
范例03:汉诺塔
>>> def hanoi(n,x,y,z):
... if n==1:
... print(x, '-->',z)
... else:
... hanoi(n-1,x,z,y) #将n-1个盘子从x移动到y上,中间借用z
... print(x,'-->',z) #将最底下的最后一个盘子从x移动到z上
... hanoi(n-1,y,x,z) #将y上的n-1个盘子移动到z上,中间借用x