递归求阶乘
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))
递归的精髓在于两点
- 在函数里调用函数自身,把问题推给下一层
- 一定要有一个兜底的地方,比如上面代码中的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)