Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 递归函数_Javascript - Fatal编程技术网

Javascript 递归函数

Javascript 递归函数,javascript,Javascript,我有一个数字数组,通过我的_number函数我创建一个随机数字,如果它已经存在于数组中,我再次调用该函数并创建一个新的随机数字,如果它不在数组中,我通过push发送给它 不幸的是,在浏览器崩溃之前,总是反复发送所有号码 我怎样才能解决这个问题 谢谢你的帮助 var数=[1,2,3,4,5]; 函数mainformation(){ 函数my_number(){ var randomNumber=Math.floor((Math.random()*7)+1); 对于(设i=0;i我不确定您到底想做

我有一个数字数组,通过我的_number函数我创建一个随机数字,如果它已经存在于数组中,我再次调用该函数并创建一个新的随机数字,如果它不在数组中,我通过push发送给它

不幸的是,在浏览器崩溃之前,总是反复发送所有号码

我怎样才能解决这个问题

谢谢你的帮助

var数=[1,2,3,4,5];
函数mainformation(){
函数my_number(){
var randomNumber=Math.floor((Math.random()*7)+1);

对于(设i=0;i我不确定您到底想做什么,但我弄乱了您的代码。请尝试此代码,看看它是否是您预期的输出。(这可能是错误的,tbh。抱歉。)

var数=[1,2,3,4,5];
函数mainformation(){
函数my_number(){
var randomNumber=Math.floor((Math.random()*7)+1);
for(让我输入数字){
if(数字[i]==随机数){
返回;
}否则{
数字。推送(随机数字);
}
}
}
我的号码();
}
main函数();
控制台日志(编号);

my\u number
函数中,您已经在
for循环中再次调用了
my\u number
,需要调用
my\u number
函数,得到
for循环的结果

因此,需要通过
for loop
获得
randomNumber
是否存在的结果,并基于此,您需要决定是否再次调用该函数

  • 首选方式
    const number=[1,2,3,4,5];
    函数mainformation(){
    函数my_number(){
    常量随机数=数学楼层((数学随机数()*7)+1);
    const isExisted=number.some((项)=>item==randomNumber);
    如果(存在){
    我的号码();
    }否则{
    数字。推送(随机数字);
    }
    }
    我的号码();
    }
    main函数();
    
    console.log(数字);
    代码中有很多问题

    • 正如Pointy指出的,
      i
      应该是
      numbers[i]
      ,以比较数组元素而不是索引
    • 在另一个函数中有一个函数定义,这很好,但是外部函数所做的唯一事情就是调用内部函数,因此它是多余的
    • numbers.push(randomNumber)
      应该在for循环之外执行,因为它只会检查
      randomNumber
      是否匹配第一个元素,而忽略其余元素
    • 在for循环中调用
      my_number
      后,需要一个
      return
      语句来防止检测到故障后循环继续
    var数=[1,2,3,4,5];
    函数my_number(){
    var randomNumber=Math.floor((Math.random()*7)+1);
    for(设i=0;iconsole.log(数字);
    此问题应包括更多详细信息并澄清问题。根据给定的详细信息,请检查以下答案

    // I have numbers array
    var numbers = [1, 2, 3, 4, 5];
    
    function mainFunction() {
        // through my_number function  
        function my_number() {
            // I create a random numer
            var randomNumber = Math.floor((Math.random() * 7) + 1);
    
            var isExists = numbers.includes(randomNumber);
    
            // if it already exist in the array
            if (isExists) {
                // I call the function again
                my_number();
            } else { // if it is not in the array
                // I send it to it through push
                numbers.push(randomNumber);
            }
    
        }
    
        my_number();
    }
    
    mainFunction();
    console.log(numbers);
    

    每次你把另一个数字推到数组上,
    numbers.length
    都会改变。哦,你也在比较
    i
    ,而不是
    numbers[i]
    。我已经为numbers[i]改变了i,我在控制台中得到了这个结果:最大调用堆栈大小exceeded@JP您可以使用
    number.includes(randomNumber)
    includes()
    方法确定数组的条目中是否包含某个值,并根据需要返回
    true
    false
    。检查重复项并不是免费的。而且,您希望从给定的一组数字中获得大多数数字。这意味着,您前进的越远,可能生成的重复项越多,并且您的进度会变慢。这里更好的方法是生成一个包含所有可能值的列表,将其洗牌,然后从洗牌后的列表中获取前n个值。