以数组作为输入的递归函数

recursive function with an array as input

本文关键字:递归函数 输入 数组      更新时间:2023-09-26

我正试图创建一个函数,从一个名为胸部的数组中获取胸部练习。

这个函数需要能够随机选择几个练习,这是我使用随机指针完成的。为了停止重复练习,我比较选择的胸部练习(即胸部[指针]),并将其与最终数组中的所有值进行比较。

如果新练习尚未在最终数组中,则会返回新拾取的练习,然后将其推送到最终数组中。如果它已经在最终数组中,则递归调用该函数。其想法是,该函数将递归运行,直到它找到一个尚未选择的新练习:

获取胸脯:

function getChest(arr){
    var pointer = 0;
    //random array pointer
    pointer = Math.round(Math.random() * (chest.length - 1));
    //check for duplicate
    for(var i = 0; i < arr.length - 1; i++){
        if(arr[i].name === chest[pointer].name){
            return getChest(arr);
        } else {
            return chest[pointer];
        }
    }
};

主要功能使用此方法随机选择练习。最后一个数组称为"day"。:

function chooseExercises(){
    for(i = 0; i <= 5; i++){
        ex = getChest(day);
        day.push(ex);
    }
 }

我遇到的问题是,当我运行它时,仍然有重复的。你知道出了什么问题吗?(我使用angularJS)

将您的函数修改为

function getChest(arr){
    var pointer = 0;
    //random array pointer
    pointer = Math.round(Math.random() * (chest.length - 1));
    //check for duplicate
    for(var i = 0; i < arr.length; i++){
        if(arr[i].name === chest[pointer].name){
            return getChest(arr);
        } 
    }
    return chest[pointer];
};

基本上,循环在用其全长检查值之前就已经断开了。

EDIT:您的循环在arr.length-1上运行了多次,实际上应该只是arr.length