gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:00:11 27 4
gpt4 key购买 nike

我正在尝试自学如何编写递归函数,有人建议尝试将循环转换为递归。所以我试图将第一个 for 循环函数更改为递归函数。这是我的代码:

// Function that uses for loop.
function onlyOne(value1, value2, value3) {
var array = [value1, value2, value3];
var count = 0;
for(var i = 0; i < array.length; i++) {
if(!!array[i] === true) {
count ++;
}
} if(count === 1) {
return true;
} else {
return false;
}
}

// Function that uses recursion.
function onlyOne2(a, b, c) {
var array = [a, b, c];
var count = 0;
var numTrue = 0;
if(!!array[count] === true) {
numTrue++;
}
if(count === array.length-1) {
if(numTrue === 1) {
return true;
} else {
return false;
}
}else {
count++;
return onlyOne2(a, b, c);
}
}

console.log(onlyOne2(true, false, false));

每个函数的目的是在只有一个参数为真时返回真。否则函数返回 false。 for 循环功能正常工作。但是,当我使用递归函数时,出现错误:超出最大调用堆栈大小。我想知道我做错了什么。感谢您的帮助!

最佳答案

你的方法有一些问题

  • if(!!array[i] === true) 直接使用 bool 值:if(array[i])

你要求一个 true 值返回 true

if (count === 1) { // <- Use this comparison to return the specific value.
return true;
^
} else {
return false;
^
}

直接返回比较:return count === 1;

在您的函数 onlyOne2 中,您停止循环的“递归案例”不正确。

 count === array.length-1
^ ^

你必须使用索引i

查看带有这些修复的代码片段

// Function that uses for loop.
function onlyOne(value1, value2, value3) {
var array = [value1, value2, value3];
var count = 0;
for (var i = 0; i < array.length; i++) {
if (array[i]) {
count++;
}
}

return count === 1;
}

console.log(onlyOne(true, false, false));

function onlyOne2(value1, value2, value3, count, i) {
var array = [value1, value2, value3];

if (i === array.length) return count === 1;

if (array[i]) count++;

return onlyOne2(value1, value2, value3, count, ++i);
}

console.log(onlyOne2(true, false, false, 0, 0));

看到了吗?现在正在使用递归处理循环。

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

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