关于递归调用'return'疑问

今天想利用递归函数来生成指定范围的随机数
通过if()语句来筛查只能满足范围内的数,才return num,
否则继续递归函数自己!
但是不管结果如何返回的都是undefined.
<script>

var a = 1;
function test() {
    if (a < 5) {
        a++;
        test();
    }else{
        return a;
    }
  

}
var b = test();
console.log(b);

</script>
然后写上面的的代码来测试递归,结果也是返回undefined,打算断点,逐步测试,console.log(),也是在执行完4次后才在后台打印 ,但还是打印undefined!
究竟为什么呢?
求大伙指导,在此先感谢!

阅读 3k
3 个回答
var a = 1;
function test() {
    if (a < 5) {
        a++;
        return test();        // 这里要return
    }else{
        return a;
    }
  

}
var b = test();
console.log(b); // 5

再说你要生成指定范围内的随机数,完全没必要这样做呀

// 生成min到max范围内的随机数
function random(min,max){
      var range = min - max;
      var rand = Math.random();
      return min + Math.round(rand * range);
}
var a = 1;
function test() {
    if (a < 5) {
        a++;
        return test();
    }else{
        return a;
    }
  

}
var b = test();
console.log(b);

因为是递归,在递归到a=5的时候,test()拿到了a,但是没有继续往向上return
具体逻辑:
a=1,a<5,调用test();
a=2,a<5,调用test();
a=4,a<5,调用test();
a=5,return a;//这时return的a只是交给了a=4那一步,a=4时并没有处理这个这个值,导致a=4没有return,直到a=1,都没有return;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题