什么是递归?算法
递归式方法能够被用于解决不少的计算机科学问题,所以它是计算机科学中十分重要的一个概念。
绝大多数编程语言支持函数的自调用,在这些语言中函数能够经过调用自身来进行递归。
计算理论能够证实递归的做用能够彻底取代循环,所以在不少函数编程语言(如Scheme)中习惯用递归来实现循环。
递归的强大之处在于它容许用户用有限的语句描述无限的对象。
所以,在计算机科学中,递归能够被用来描述无限步的运算,尽管描述运算的程序是有限的。
下面是对Python递归函数的简单了解:
# 相似与栈的先进后出模式
# 递归的两个必要条件 # 1.要有递推关系 # 2.要有临界 def digui(num): print('$'+str(num)) # 临界值 if num >0: # 这里用的是调用自己的函数(递推关系) digui(num-1) else: print('='*20) print(num) digui(3)
输出结果为:
$3 $2 $1 $0 ==================== 0 1 2 3
#----------------汉诺塔-----------------# # 若是有n个圆盘,所需移动的步数为 2^n-1 i = 0 # 定义一个函数给4个参数n是圆盘的个数,a表明A柱子,b,c 函数里面的是形式参数 def move(n,a,b,c): # 把变量i全局化,若是不全局化,只可访问读取不能进行操做修改 global i if n==1: i += 1 print('移动第',i,'次',a,'-->',c) else: # 1.把A柱上n-1个圆盘移动到B柱上 move(n-1,a,c,b) # 传的才是实际参数 # 2.把A柱上最大的移动到C柱子上 move(1,a,b,c) # 3.把B柱子上n-1个圆盘移动到C柱子上 move(n-1,b,a,c) move(4,'A','B','C')
输出结果为:编程语言
移动第 1 次 A --> B 移动第 2 次 A --> C 移动第 3 次 B --> C 移动第 4 次 A --> B 移动第 5 次 C --> A 移动第 6 次 C --> B 移动第 7 次 A --> B 移动第 8 次 A --> C 移动第 9 次 B --> C 移动第 10 次 B --> A 移动第 11 次 C --> A 移动第 12 次 B --> C 移动第 13 次 A --> B 移动第 14 次 A --> C 移动第 15 次 B --> C