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

标签 javascript recursion

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

有人可以解释一下 javascript 在重复函数调用时的执行方式吗?在本例中,以递归模式为例。

main 函数有两个参数

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

整个代码

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 个随机字符,有时会返回未定义,即使使用相同的参数调用该函数也是如此。

最佳答案

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

 var randIndex = getRandomIntInteger(0, arr.length)

对此:

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

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

关于javascript - 递归函数返回预期的字符串值,有时未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43073645/

相关文章:

javascript - 当一个 div 具有切换类时,如何将类添加到另一个 div?

javascript - 如何制作如图所示的弹出屏幕?

java - 在树数据结构中添加节点时递归

c - C 中的 SUM 递归函数

javascript - 限制可以通过使用传单单击创建的标记数量

javascript - jQuery .hide() 只工作了一半的时间

javascript - 如何使用 Typescript + react-leaflet 创建 GeoJSON Feature 元素

Groovy 2.1.9 中的闭包递归

递归子文件夹链接的 .htaccess 规则

javascript - 如果我在我所在的函数上调用 onload 事件,它是否考虑递归?