def fact(x):#定义乘阶函数
if x == 1:#特判
return 1;
else:
return x * fact(x - 1)#调用自己
Sum = 0
for i in range(1, int(input()) + 1):#我不友善,真的!
Sum += fact(i)
print(Sum)输出
来,讲解一下这整个代码的套路:
从样例入手:
输入 3 3 3
f o r for for 从 1 1 1 开始:
1 1 1 返回 1 1 1, 1 = 1 1 = 1 1=1
f o r for for 循环到 2 2 2
从 2 2 2 开始:
2 2 2 返回 2 2 2 ∗ * ∗ ( 2 − 1 ) ( 即 x − 1 ) (2 - 1)(即x - 1) (2−1)(即x−1)
2 − 1 = 1 2 - 1 = 1 2−1=1
1 1 1 返回 1 1 1, 2 ∗ 1 = 2 2 * 1 = 2 2∗1=2
f o r for for 循环到 3 3 3
3 3 3 返回 3 3 3 ∗ * ∗ ( 3 − 1 ) ( 即 x − 1 ) (3 - 1)(即x - 1) (3−1)(即x−1)
3 − 1 = 2 3 - 1 = 2 3−1=2
2 2 2 返回 2 2 2 ∗ * ∗ ( 2 − 1 ) ( 即 x − 1 ) (2 - 1)(即x - 1) (2−1)(即x−1)
2 − 1 = 1 2 - 1 = 1 2−1=1
1 1 1 返回 1 1 1, 3 ∗ 2 ∗ 1 = 6 3 * 2 * 1 = 6 3∗2∗1=6
样例答案:
1 + 2 + 6 = 9 1 + 2 + 6 = 9 1+2+6=9
你看得可能会有点晕。
我给你再简洁一点:
def coutdown(x):
print(x)
coutdown(x - 1)
调用这个代码,你会发现他停不下来,然后关机吧按 C t r l + C Ctrl + C Ctrl+C就可以停下来
这就是递归:递归就是调用自己的函数
它的作用和循环差不多,但递归有基线条件(退出递归)和递归条件(继续递归),在这点上我认为递归比循环好用,但递归会调用栈,栈会越用越多,运气好的话—>蓝屏警告,在这点上循环不会占用更多的空间。