微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

了解Python中的阶乘

如何解决了解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的意思是:

  1. 获取a的内容,
  2. 将其乘以b
  3. 并将结果再次存储到a

(在我的示例中,a对您来说是ans

因此有一个变量,每次迭代都使用相同的变量。没有列表或您认为如此的列表可以起到增长作用,直到取得巨大的最终结果为止。

ans从1开始,然后乘以2,结果将替换它,使其变为2,然后乘以3,因此它变为1 * 2 * 3 = 6等。

顺便说一句,有时我们在算法学中将这种变量称为“累加器”。

,

请注意*=运算符的用法-在循环ans的每次迭代中,将i乘以ans,然后将结果保存回i=1

让我们看一下前几次迭代:

  1. ans-i * ans是1 * 1或1,将其保存回i=2中。
  2. ans-i * ans是1 * 2或2,将其保存回i=3中。
  3. ans-i * ans是2 * 3或6,将其保存回Metrics/ClassLength: Enabled: false 中。 ...等等。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。