有人可以向我解释为什么这个递归函数不会在返回时退出。提前谢谢。
var numberArr = [5,4,3,2];
function findCommon(x) {
x += numberArr[0];
for (var i = 1; i < numberArr.length; i++) {
if((x % numberArr[i]) === 0) {
continue;
} else {
findCommon(x);
}
}
console.log("done " + x);
return x;
}
findCommon(0);
答案 0 :(得分:0)
您的代码会在返回时退出,因为您可以看到是否稍微修改它以显示更多信息。
var numberArr = [5,4,3,2];
function findCommon(x) {
x += numberArr[0];
for (var i = 1; i < numberArr.length; i++) {
if((x % numberArr[i]) === 0) {
console.log("Continuing: " + i)
continue;
} else {
console.log("B: " + findCommon(x))
}
}
console.log("done " + x);
return x;
}
console.log("A: " + findCommon(0));
答案 1 :(得分:0)
我用下面的代码实现了我的目的。关于如何避免返回全局var或其他方式的任何建议我可以做到这一点。
var numberArr = [5,4,3,2];
var y;
function findCommon(x) {
x += numberArr[0];
for (var i = 1; i < numberArr.length; i++) {
if((x % numberArr[i]) === 0) {
console.log("continue " + x);
continue;
} else {
console.log("not div " + x);
findCommon(x);
return y;
}
}
y = x;
console.log("done " + x);
}
findCommon(0);
&#13;
答案 2 :(得分:0)
尝试使用代码..代码中发生的事情真是太棘手了。实际上你的函数findcommon(x)
正在调用自身,正在发生的是它运行当前的函数和调用的函数。这意味着如果我们一次调用findcommon(x)
,那么它将不会从当前不会结束。它逐个完成这两个功能。
var numberArr = [5,4,3,2];
function findCommon(x) {
x += numberArr[0];
for (var i = 1; i < numberArr.length; i++)
{
if((x % numberArr[i]) === 0)
{
continue;
}
else
{
findCommon(x);
}
}
console.log("done " + x);
return x;
}
//findCommon(3);
console.log("done " +findCommon(3));
例如:如果我从函数A调用函数B,它将完成B和A两者 就像你的函数findCommon(x);自称这么多次。这就是为什么它在recursive.hope中有所帮助。