首页 > 解决方案 > 递归函数 Js

问题描述

我有 numbers 数组,通过 my_number 函数创建一个随机数,如果它已经存在于数组中,我再次调用该函数并创建一个新的随机数,如果它不在数组中,我通过推送将其发送给它。

不幸的是,它似乎一次又一次地发送所有数字,直到浏览器崩溃。

我怎么能解决这个问题。

谢谢你的帮助

var numbers = [1,2,3,4,5];

function mainFunction(){
    function my_number(){
        var randomNumber = Math.floor((Math.random()*7)+1);
        for(let i=0; i<numbers.length; i++){
            if(numbers[i] === randomNumber){
                my_number();
            }else{
                numbers.push(randomNumber);
            }
        }
    }
    
    my_number();
}

mainFunction();

标签: javascript

解决方案


my_number函数中,您在my_number内部再次调用了函数,for-loop需要使用.my_numberfor-loop

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

  1. 首选方式

    const numbers = [1,2,3,4,5];
    
    function mainFunction(){
      function my_number(){
        const randomNumber = Math.floor((Math.random()*7)+1);
        const isExisted = numbers.some((item) => item === randomNumber);
        if (isExisted) {
          my_number();
        } else {
          numbers.push(randomNumber);
        }
      }
      my_number();
    }
    
    mainFunction();
    console.log(numbers);

  2. 关于您的代码库。

const numbers = [1,2,3,4,5];

function mainFunction(){
  function my_number(){
    const randomNumber = Math.floor((Math.random()*7)+1);
    let isExisted = false;
    for (let index = 0; index < numbers.length; index ++) {
      if (numbers[index] === randomNumber) {
        isExisted = true;
        break;
      }
    }
    if (isExisted) {
      my_number();
    } else {
      numbers.push(randomNumber);
    }
  }
  my_number();
}

mainFunction();
console.log(numbers);


推荐阅读