Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 利用这个因式化函数,逐步完成它_Javascript_Algorithm - Fatal编程技术网

Javascript 利用这个因式化函数,逐步完成它

Javascript 利用这个因式化函数,逐步完成它,javascript,algorithm,Javascript,Algorithm,请解释一下。行返回num*factorialize(num-1)。假设我们有一个整数5作为参数。必须是5*factorialize(5-1)=5*4=20。我们怎么到达120 function factorialize(num) { if (num === 0) { return 1; } return num * factorialize(num - 1); } factorialize(5) 引用你的问题 假设我们有一个整数5作为参数。必须是5*fact

请解释一下。行返回num*factorialize(num-1)。假设我们有一个整数5作为参数。必须是5*factorialize(5-1)=5*4=20。我们怎么到达120

function factorialize(num) {
    if (num === 0) {
        return 1;
}

    return num * factorialize(num - 1);
}

factorialize(5)

引用你的问题

假设我们有一个整数5作为参数。必须是5*factorialize(5-1)=5*4=20。我们怎么到达120

当您开始使用
5*factorialize(5-1)
时,您将5-1计算为4(正确),但随后您放弃了将其分解的调用。这就是你得到20分的原因

让我们把
分解为
函数,并逐步完成它

function factorialize(num) {
    if (num === 0) {
        return 1;
    }

    return num * factorialize(num - 1);
}

factorialize(5)
由于5被传递到factorialize,因此局部变量
num
不等于0。然后,此函数返回
num*因子化(num-1)
。既然
num
是5,我们就开始插入数字

= 5 * factorialize(5 - 1)
现在,我们再次调用
factorialize
,这次是4(5-1)。这仍然不等于0,所以让我们用它的返回值替换
factorialize(5-1)
(因为
num
在这个factorialize调用中是4,我们将返回
4*factorialize(4-1)

和以前一样,我们现在再次调用factorialize,这次是3

= 5 * (4 * (3 * factorialize(3 - 1)))
等等

= 5 * (4 * (3 * (2 * factorialize(2 - 1))))
诸如此类

= 5 * (4 * (3 * (2 * (1 * factorialize(1 - 1)))))
现在,
factorialize(0)
返回1;if语句最终计算结果为true。这是基本情况,一个已知答案,无需进一步使用递归即可表示。替换它,我们得到以下结果:

= 5 * (4 * (3 * (2 * (1 * 1))))
这在数学上相当于

= 5 * 4 * 3 * 2 * 1 * 1
等于

= 120

遍历调用
factorialize(4)
…它不会立即返回,因为
num
不是零。那么它做什么呢?
factorialize(x)
将始终返回x的factorial。因此,
5*factorialize(5-1)=5*4!=5*24=120
对不起,伙计们。非常感谢你们的帮助,但我没有得到它。我们没有循环。这个函数所做的就是如果数字等于0,则返回1。num*factorialize(num-1)如何给我们5*factorialize(5-1)=5*4!=5*24?您是否尝试过使用调试器遍历代码?这将有助于您了解正在发生的事情。顺便说一下,如果您将其传递为负数,会发生什么情况?另外,强烈建议正确缩进代码以保持您的理智。谢谢您,Chris。谢谢您的演练,谢谢您的友好。我很高兴“我不明白人们对我的好奇心投了反对票,我正在努力学习并真正理解背后的逻辑。真的谢谢你。不客气,@EdgarKiljak。递归是计算机科学中较难理解的概念之一,所以有时候,一步一步地进行真的很有帮助!”torazaburo,我用以下两个a来解决这个问题假设:提问者没有编写原始代码,这是一个基本的通用递归问题,而不是一个特定于JavaScript的问题。此外,正如我在回答的开头所解释的,实际的逻辑谬误是将
factorialize(5-1)
as
4
而不是as
factorialize(4)
@torazaburo我是一名学习者。我在做编码的第一步。经历免费代码营的基本算法。我只介绍了JavaScript的基本知识。你非但没有帮助我,也没有给我建议,反而让我觉得很不宽容。我尊重你作为一名开发人员。你很久以前也是一名代码新手。你为什么这么生气?我正在全力以赴我正在为BSc计算学习,这不是一个软件工程,甚至还没有接近。我对所有这些东西都非常渴望。我自己尽可能多地编码。每一分钟我都有空闲时间。你的评论根本不鼓励我进步。Sorry@EdgarKiljak我并不是不宽容。我只是非常平静地建议你学习和学习使用基本工具,这是JS编程过程的核心,同时让您可以怀疑您是否已经使用过这些工具,也许您根本没有想过在这种情况下使用它们。我不知道您在哪里找到我“恼火”的证据.新手不是不学习工具的好借口。新手木匠是不知道锤子是什么的好借口吗?
= 120