如何解决了解Python中的阶乘
我知道如何为数字的阶乘编写函数,但是我不确定为什么它可以工作。
def factorial (num):
ans = 1
for i in range (1,num + 1):
ans *= i
return (ans)
在我看来,ans仍然是1,并与1到nums + 1上的每个索引相乘。因此它看起来像是(1 * 1,1 * 2,1 * 3,...)。此函数如何导致参数中数字的阶乘?
解决方法
为什么不在代码中引入一些打印语句以查看发生了什么?
def factorial(num):
ans = 1
for i in range(1,num + 1):
print(f" ans = {ans},going to multiply by {i}")
ans *= i
return ans
print("Trying to find the factorial of 5")
final = factorial(5)
print(f"Final answer is: {final}")
这给出了:
Trying to find the factorial of 5
ans = 1,going to multiply by 1
ans = 1,going to multiply by 2
ans = 2,going to multiply by 3
ans = 6,going to multiply by 4
ans = 24,going to multiply by 5
Final answer is: 120
因此,最重要的是,您需要更好地了解*=
在ans *= i
中的作用(又名就地运算符),请参见此处:https://docs.python.org/3/library/operator.html#in-place-operators
a *= b
的意思是:
- 获取
a
的内容, - 将其乘以
b
, - 并将结果再次存储到
a
。
(在我的示例中,a
对您来说是ans
)
因此有一个变量,每次迭代都使用相同的变量。没有列表或您认为如此的列表可以起到增长作用,直到取得巨大的最终结果为止。
ans
从1开始,然后乘以2,结果将替换它,使其变为2
,然后乘以3,因此它变为1 * 2 * 3 = 6
等。
顺便说一句,有时我们在算法学中将这种变量称为“累加器”。
,请注意*=
运算符的用法-在循环ans
的每次迭代中,将i
乘以ans
,然后将结果保存回i=1
。
让我们看一下前几次迭代:
-
ans
-i
*ans
是1 * 1或1,将其保存回i=2
中。 -
ans
-i
*ans
是1 * 2或2,将其保存回i=3
中。 -
ans
-i
*ans
是2 * 3或6,将其保存回Metrics/ClassLength: Enabled: false
中。 ...等等。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。