我想算6!,我看别人这么写,但是我根本不明白,在调试的时候我真的不理解为什么这个i依次变成654321然后又上升123456
假设我们用递归来算阶乘 f(n),以求6的阶乘为例,如图:
如有帮助,还请帮忙点下采纳!感谢!
递归是一个直接或间接调用函数自身的嵌套型函数。每一个递归函数都有递推(递的概念)和回推(归的概念)的过程。递推过程是将一个复杂的大问题一步步分解成简单的过程类似的小问题,而回推过程是在递归历史的基础上,从最后的最简单的小问题开始,结合该层上一层的输入参数与输出结果,按逻辑一步步向上恢复成最初的复杂的大问题。
可以写得再简单点,递归就是一层层的代入计算,看下面写的计算过程就明白了
def x(i):
if i==1:
return 1
return i*x(i-1)
x(6)
720
计算过程:
x(6)=6*x(5)
=6*(5*x(4))
=6*5*(4*x(3))
=6*5*4*(3*x(2))
=6*5*4*3*(2*x(1))
=6*5*4*3*2*1
=720
就是套娃 好比打开一个盒子 你发现里面有个一样的盒子,有打开又有一个, 一直开,直到看到里面的东西,就是return 1,然后把盖子再一层一层盖上
递归可以通过函数调用自身的方法来精简代码
以题里的阶乘为例,如果是1或0就返回1;如果把当前的数和之前的结果相乘,之前的结果也是和更之前的结果相乘。这一点前面几个回答里都写了,说两个小问题一个是你没考虑传入数值为0的情况还有一个是那个get定义的没啥用不如不定义
可以考虑换成这种写法
def get_factorial(n):
if n == 0 or n == 1:
return 1
else:
return n*get_factorial(n-1)