递归 函数调用自身,且有终止条件
python默认递归层数为100
可以修改层数
import sys
sys.setrecursionlimit(1000)
递归求阶乘
------------1迭代
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))
-------------2递归
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))
递归有危险性,因为有栈操作,消耗内存,所以一定要传出去,归回值
斐波那契数列
F(n)=F(n-1)+F(n-2) F(1)=1 F(2)=1
----------1迭代
def factorial(n):
a = 1
b = 1
if n>=1:
print('1 --> 1\n')
if n>=2:
print('2 --> 1\n')
if n>=3:
for i in range(1, n-1):
c = a + b
print('%d --> %d\n'%(i+2, c))
a = b
b = c
return c
else:
return 1
number = int(input('输入一个数:'))
result = factorial(number)
print('%d 的斐波那契数是 %d'%(number, result))
--------------2递归
def fab(n):
if n <1:
print('输入有误')
return -1
if n == 1 or n == 2:
return 1
else:
return fab(n-1) + fab(n-2)
number = int(input('输入一个数:'))
result = fab(number)
if result != -1:
print('%d 的斐波那契数是 %d'%(number, result))
递归很好写,但很费内存,比如35以上就需要一段时间才能计算出来
汉诺塔游戏算法
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')