0基础教程习题11—递归方法求阶乘

递归求阶乘


1、题目要求

 

用递归函数求阶乘


 2、程序分析

 

  • 5的阶乘表示为5!,5! = 5*4*3*2*1

如果是用普通函数来做,可以写如下代码

#coding=utf-8
def fact(j):
    sum = 1
    for i in range(1,j+1):
        sum *= i
    return sum
print "{number}! = {sum}".format(number = 5,sum = fact(5))

 3、使用递归函数

 

#coding=utf-8

def fact(j):
    if j == 1 :
        return 1
    else:
        return j * fact(j-1)

print "{number}! = {sum}".format(number = 5,sum = fact(5))

递归的精髓在于两点

  1. 在函数里调用函数自身,把问题推给下一层
  2. 一定要有一个兜底的地方,比如上面代码中的j == 1 ,它就是用来兜底的,一层推给下一层,总要有一层来做实事,不然一直推下去,无穷无尽的,永远也没有结果

想计算5!,就调用函数fact(5)

而fact(5) 必然等于5 * fact(4)

fact(4) 必然等于4 * fact(3)

fact(3) 必然等于3 * fact(2)

fact(2) 必然等于2 * fact(1)

 

fact(1) 还能再往下推了么,不能,因为1的阶乘就是1,不是1 * fact(0)

fact(1) 是用来兜底的,只要它给出一个明确的结果,就能计算fact(2)

 

然后计算fact(3)

然后计算fact(4)

最后计算fact(5)