【发布时间】:2018-07-13 07:50:11
【问题描述】:
我正在尝试自学如何编写递归函数,有人建议尝试将循环转换为递归。所以我试图将第一个 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));
每个函数的目的是在只有一个参数为真时返回真。否则函数返回假。 for 循环功能正常工作。但是,当我使用递归函数时,出现错误:超出最大调用堆栈大小。我想知道我做错了什么。感谢您的帮助!
【问题讨论】:
-
您必须每次都将数组的尾部作为参数传递,而不是重新创建它
-
你在递归函数中失去了
count的踪迹,每次执行它都会设置回0 -
你最好学习如何从递归中循环。
标签: javascript function loops recursion tail-recursion