当前位置: 首页 > 知识库问答 >
问题:

递归返回语句

龚招
2023-03-14
var found = "false";
var max;

function ArrayAdditionI(array) { 

max = Math.max.apply(null,array);
var p = array.indexOf(max);

array.splice(p,1);
array.sort(function(a, b){return a-b;});


found = findSum(array, 0, 0);

return found;

}

function findSum(array, sum, startIndex){

for(var i = startIndex; i < array.length ; i++){

    sum += array[i]; 

    if(sum === max){
        found = "true";
        break;
    }else if(sum > max){
        break;
    }

     if(i+2 < array.length && sum < max){
         findSum(array, sum, i+2);
    }

}
    if(startIndex < array.length && sum !== max){
        return findSum(array, 0, startIndex+1);
    }

    return found;
}

ArrayAdditionI(readline());

我不得不使用全局变量found来指示在哪里找到了一个和。返回语句始终未定义。

此外,如果在下面的if语句中使用return语句,代码将无法正常工作。

if(i+2 < array.length && sum < max){
    return findSum(array, sum, i+2);
}

这不是问题的最佳解决方案,但这是我得到的工作版本。

function ArrayAdditionI(array) { 
    var max = Math.max.apply(null,array);

    //remove max element from array
    var p = array.indexOf(max);
    array.splice(p,1);

    //sort array
    array.sort(function(a, b){return a-b;});

    //call find sum function
    return findSum(array, 0, 0, max);

}

function findSum(array, sum, startIndex){
    for(var i = startIndex; i < array.length ; i++){

        sum += array[i];

        if(sum === max){
            return true;
        }else if(sum > max){
            break;
        }

        if(i+2 < array.length && sum < max){
            **return** findSum(array, sum, i+2, max);
        }

    }
    if(startIndex < array.length && sum !== max){
        return findSum(array, 0, startIndex+1, max);
    }

    return false;
}

// calling the first function
ArrayAdditionI([  7, 2,90, 31, 50 ]);           

返回语句之间的****,删除时代码工作,否则我要么得到false或未定义。我不明白这部分!为什么删除返回就能解决问题,我认为每个递归调用都必须用返回语句进行。

问题可能是由于多次呼叫造成的吗?我是不是以不恰当的方式使用递归?

共有1个答案

司徒墨竹
2023-03-14

您的代码中有一些错误可能会导致错误。

T.J。Crowder已经说过,使用实际的布尔值而不是字符串。

find变量没有在findsum函数中定义。这使得JavaScript假设您正在设置一个全局变量。将var found=false;添加为findsum函数的第一行。

 类似资料:
  • 我有一个if语句,它递归地调用自己在二叉查找树中查找值。 当我试图编译程序时,它会因为结尾没有return语句而感到不安。程序最终应该命中一个return语句,但为了使其编译,我在最后添加了一个return语句。但是程序总是从该语句返回,即使它在else-if语句中表示to。我知道它到达了那个语句,但我不知道为什么它没有从那个语句中返回。

  • 问题内容: 我有一个像这样的递归函数 我正在使用它 我注意到您好永远不会返回,因为我怀疑我在递归调用上创建了多个promise,但是我不确定如何从中返回。 如何返回每个递归创建的Promise? 编辑: 结果是 问题答案: 递归是一种功能性遗产,因此将其与功能性样式一起使用可产生最佳效果。这意味着编写接受和操作其输入(而不是依赖于外部状态)和返回值(而不是依赖于突变或副作用)的函数。 你的程序,而

  • 我正在创建一个递归导航迷宫的程序。代码: 然而,每当我到达死胡同时,它都不会回溯。当我调试时,它表明当程序从递归或“回溯”返回时,我的起始值专注于停留在我的死胡同空间。 例如: 9是我的出发点。2是我的退出。4是我的道路。1 表示墙壁。当我到达一个死胡同时(在本例中为第 7 行,第 2 列)。我的立场是等于整个程序其余部分的死胡同空间。这是为什么呢?

  • 我有一个递归函数,它会重复这个函数,直到不满足if条件,然后输出一个整数。但是,此函数之外需要整数的函数正在接收一个单位。我应该如何修改代码以返回int? 这就是整个程序 }

  • 我正在编写一个递归函数,如下所示: 此函数用于接收员工并查找其管理者。如果找到管理器,则将管理器id推送到数组中($)- 所以我的问题是,如果我不在第6行返回递归调用(这是-

  • TestCase 2: baseChars:['a','b'] 所需字符串长度:1 产出: 有人能帮忙吗?我已经把我的代码放在GitHub里了。如果您可以将我的实现更改为非递归,但保留函数返回类型,也将受到重视。