"""
递归算法:重复分解问题,无限调用自身
递归条件:终止无限循环的条件
区别:while循环与递归之间的异同点:作用是相同的,递归方案的解决思路更清晰
"""
def function_print(i):
print(i)
i = i-1
if i <= 1:
return 1
else:
function_print(i)
function_print(7)
"""
阶乘运算
注意:对栈的理解,传入是5*4*3*2*1 计算时 1*2*3*4*5
"""
def factorial(n): # 自定义求n的阶乘函数
print('key_num', n)
if n == 1: # 判断n=1
return 1 # 返回1结束
else: # 递归条件 即n!=1
return n * factorial(n - 1) # 递归求阶乘
result = factorial(5) # 调用阶乘函数
print(result)
"""
汉诺塔问题
"""
def hanoi(n,A,B,C): # 定义汉诺塔函数,参数n是圆盘数,A、B、C是3根柱
if n==1: # 判断圆盘数,如果等于1
print(A,'-->',C,' ',n) # 直接将A柱上的圆盘移动到C柱上
else: # 否则,进行递归移动
hanoi(n-1,A,C,B) # 递归将A柱最上方的n-1个盘子落在B柱
print(A,'-->',C,' ',n) # 输出将A柱上的圆盘移动到C柱上,也就是将A柱的最小面盘子落在C柱
hanoi(n-1,B,A,C) # 递归将B柱上的n-1个盘子,落在C柱
hanoi(3,'A','B','C') # 调用函数