递归函数返回预期的字符串值,有时是未定义的?

时间:2017-03-28 15:25:42

标签: javascript recursion

该函数按预期随机工作,有时会返回undefined。 这是我不明白的。

有人可以解释javascript在重复函数调用时的执行情况,例如,在递归模式中。

main函数有两个参数

First Arg:一个整数,表示从第二个参数中获取的字符数。 第二个Arg:一个字符串。

整个代码

var getRandomIntInteger = function (min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

function recursive(arr, string, limit) {

    if (string.length >= limit) {
        return string
    }
    else {
        // get random integer within the range of the array ength
        var randIndex = getRandomIntInteger(0, arr.length)
        // concatenate that value sitting at that index
        string += arr[randIndex]
        // remove that value from the array
        arr.splice(randIndex, 1)
        // re-run
        return recursive(arr, string, limit)
    }

}

var main = function(k, i) {
    let inputArray = Array.from(i)
    console.log('k=',k, 'inputArray length = ', inputArray.length)


    if (k >= i.length) {
        return 'sameple size must not exceed '
    }
    let s = ""
    var res = recursive(inputArray, s, k)
    console.log('result = ', res)
    return res

}

// run the function
main(4, "ABCDEFGHI")

此函数调用有时会返回4个随机字符,有时会返回undefined,即使使用相同的参数调用该函数也是如此。

1 个答案:

答案 0 :(得分:1)

按照您定义随机函数的方式,您应该更改此调用:

 var randIndex = getRandomIntInteger(0, arr.length)

到此:

var randIndex = getRandomIntInteger(0, arr.length - 1)

...因为第二个参数是getRandomIntInteger可以产生的数字,但arr[arr.length]始终是undefined