gpt4 book ai didi

javascript - 为什么这不给我阶乘?

转载 作者:行者123 更新时间:2023-11-28 19:08:10 25 4
gpt4 key购买 nike

function FirstFactorial(num) { 
for(var i = num - 1; i > 0; i--) {
return num * i;
}
};

console.log(FirstFactorial(8))

我只是想知道这样编写代码不会打印阶乘吗?相反,我只得到 56,即 8 * 7。我想如果我使用 for 循环,它会继续下去吗?

最佳答案

使用:

for(var i = num - 1; i > 0; i--) {
return num * i;
}

它将返回num*(num-1)值。因为它将在第一次迭代中返回值。

改为使用:

使用递归:

function FirstFactorial(num) {
if(num==1)
return num;
else
return num*(FirstFactorial(num-1))
}

或者:

fact=num;
for(var i = num - 1; i > 0; i--) {
fact*=i;
}
return fact;
<小时/>

编辑:根据OP的要求解释返回如何在递归方法中工作。

关于递归:

return num*FirstFactorial(num-1)

实际上首先将 numFirstFactorial(num-1) 的返回值相乘,即 (n-1)!。因此实际发生的情况是:

  1. FirstFactorial(num-1) 被调用。 (FirstFactorial 函数使用参数 num-1 调用。
  2. FirstFactorial(num-1) 的返回值为 (num-1)!num 的值相乘获取num!
  3. 当与参数 numFirstFactorial( 一起传递时,该值 (num!) 由函数 FirstFactorial() 返回数)

现在,在 FirstFactorial(num) 内调用 FirstFactorial(num-1) 时,FirstFactorial 函数将再次执行,检查第一个 if 条件。如果失败,将返回(n-1)*FirstFactorial(num-1 - 1)的值。这将递归,直到第一个条件满足并且返回值,而无需再次调用 FirstFactorial

您也可以将该函数视为:

function FirstFactorial(num) {
if(num==1)
return num;
else {
a = FirstFactorial(num-1);
a = a * num;
return a;
}
}

关于javascript - 为什么这不给我阶乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31285836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com