递归
如果说优秀的程序员是伯乐,那么把递归比喻成神马再形象不过了。
“普通程序员用迭代,天才程序员用递归”
递归这个概念,是算法范畴,本不属于Python,但是如果掌握了递归方法,会发现是一个非常棒的编程思路!
用普通方法实现一个正整数的阶乘
def factorial(n):
result = n
for i in range(1,n):
result*=i
return result
number = int(input('请输入一个正整数:'))
result = factorial(number)
print('%d 的阶乘是:%d' % (number,result))
>>> ================================ RESTART ================================
>>>
请输入一个正整数:10
10 的阶乘是:3628800
>>>
使用递归实现阶乘
def factorial(n):
if n == 1:
return 1
else :
return n*factorial(n-1)
number = int(input('请输入一个正整数:'))
result = factorial(number)
print('%d 的阶乘是:%d' % (number,result))
>>> ================================ RESTART ================================
>>>
请输入一个正整数:10
10 的阶乘是:3628800
>>>
python递归调用的默认深度是100层
>>> def resout():
resout()
>>> resout()
File "<pyshell#4>", line 2, in resout
resout()
File "<pyshell#4>", line 2, in resout
resout()
File "<pyshell#4>", line 2, in resout
resout()
RuntimeError: maximum recursion depth exceeded
>>>
如果需要改变递归深度,如下,1000000为设置的递归深度
>>> import sys
>>> sys.setrecursionlimit(1000000)
用递归计算斐波那契数列
def fab(n):
if n == 1 or n == 2:
return 1
if n > 2:
return fab(n-1)+fab(n-2)
number = int(input('请输入菲波那切数列的顺序值:'))
result = fab(number)
print('第 %d 个斐波那契数值为:%d' % (number,result))
汉诺塔
def hanoi(n,x,y,z):
if n == 1:
print(x,'-->',z)
else:
hanoi(n-1,x,z,y) #将前n-1个盘子从x移到y上
print(x,'-->',z) #将最底下的盘子从x移动到z上
hanoi(n-1,y,x,z) #将y上的n-1个盘子移动到z上
n = int(input('请输入汉诺塔的层数:'))
hanoi(n,'X','Y','Z')