gpt4 book ai didi

javascript - 将循环转换为递归函数

转载 作者:行者123 更新时间:2023-11-29 16:17:54 25 4
gpt4 key购买 nike

我昨天写了一个函数来计算字符串中"a" 字符的数量。我的老师告诉我将代码重构为递归函数,但我真的不知道该怎么做。

我想要一些关于这个主题的反馈,顺便说一句,我是 JavaScript 的绝对初学者。

function numberOfA(n){
var numberA =0;

for (i=0; i<=n.length; i++){

if(n.charAt(i)== "a" ){
numberA++;}
}
return numberA;

}

调用下面一段代码的函数:

var n = prompt("type a word");
var output = numberOfA(n);

alert (output);

提前致谢!

最佳答案

递归的目标是创建一个调用自身的函数。
您可能有相互递归 - 函数 A 调用函数 B,调用函数 A... 但这里肯定不需要,并且更适合当您知道需要做两件不同的事情(每个函数一个)并且知道你需要以一种跨越式的模式来完成它们。

递归发挥作用的地方是您考虑循环的时候。
通常,当你用循环做事时,你最终可能会在彼此内部有两个或三个循环。
递归不是担心管理循环,而是一种思考循环的单次迭代中会发生什么的方式,并且只编写执行该操作所需的代码。

奇异递归的一个非常简单的例子可能是将数组的所有元素记录到控制台。
这不是一个实际示例 - 这是一个简单的示例,其中包含制作实际示例所需的大部分内容。

var array = [ "one", "two", "three", "four" ];

function listNextItem (array, index) {
var item = array[index];
if (!item) { return; }

console.log(item);
listNextItem(array, index + 1);
}

listNextItem(array, 0);

我创建了一个非常简单的函数,它看起来像最内层循环的内部。
它根据 array[index] 设置一个项目变量。
如果它不存在,我们就完成了,我们可以从函数中返回,所以我们不要试图永远继续下去(这在递归中很重要)。

如果确实存在,我们会记录该项目的值(value)。然后我们调用完全相同的函数,并将完全相同的数组传递给它,但我们将 index + 1 的值传递给它。

这是否改变了任何人的生活,或者让循环过时了?
并不真地。

但这是获得递归的第一步。

下一步是从递归中获取返回

function recursiveAddOne (current, max) {
if (current === max) { return current; }
return 1 + recursiveAddOne(current + 1, max);
}

var total = recursiveAddOne(0, 3); // === 3 + 1 + 1 + 1
total; // 6

通常在我的返回语句中,我会将答案发送回外部世界的变量。
我仍在这样做,但在这里我将 call 添加到同一函数,作为我返回的一部分。

那有什么作用?
嗯,在内部函数返回之前,外部函数不能返回值。
在 ITS 内部函数返回之前,内部函数无法返回值...

...它一直下降,直到满足我的终止条件。该条件向其外部函数返回一个值。该外部函数将增加的值返回给它的外部函数... ...一直到最外面的函数将所有其他函数的值放在一起,然后将其返回给外部世界。

这就像给每个俄罗斯套娃(“babushka”)娃娃一件作品。
您从最大的一个开始,一直到最小的那个。
最小的一个先做它的工作,然后把它交还给下一个,下一个做它的工作并交还......一直回来,直到你再次到外面。

关于javascript - 将循环转换为递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13369465/

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