对于求 n!,你可能会问,为何要用递归?有何优势?答案并不复杂,利用递归可以使算法的逻辑变得非常简单。因为递归过程的每一步用的都是同一个算法,计算机只需要自顶向下不断重复即可。
具体到阶乘的计算,无非就是某个数字 n 的阶乘,变成这个数乘以 n-1 的阶乘。因此,递归的法则就两条:一是自顶而下(从目标直接出发),二是不断重复。
递归的另一个特点在于,它只关心自己下一层的细节,而并不关心更下层的细节。你可以理解为,递归的简单源自它只关注“当下”,把握“小趋势”,虽然每一步都简单,但一直追寻下去,也能获得自己独特的精彩。
下面我们就以计算阶乘为例,分别使用递推和递归方式实现,见例 1,读者可体会二者的区别。
【例 1 】利用递推和递归方式分别计算 n!(iterative-recursive.py)。
#用正向递推的方式计算阶乘
def iterative_fact(n):
fact = 1
for i in range(1, n + 1):
fact *= i
return fact
#用逆向递归的方式计算阶乘
def recursive_fact(n):
if n <= 1 :
return n
return n * recursive_fact(n - 1)
#调用递推方法计算
num = 5
result = iterative_fact(num)
print("递推方法:{} != {}".format(nu