【问题标题】:Why does this recursive javascript function expression return undefined?为什么这个递归 javascript 函数表达式返回未定义?
【发布时间】:2019-12-20 02:57:03
【问题描述】:

我为这个标准的日常作业问题编写了一个解决方案,以递归方式解决帕斯卡三角。 Console.log 显示了我的函数得出的答案。打印到 div 的 innerHTML 会将答案写入屏幕。单步执行 chrome 中的 javascript 调试器显示解决方案数组在返回 returnArray 之前存在。但最终,该函数返回“未定义”。没看懂。

var generate = function (numRows) {
    var startRow = 1;
    var startCol = 1;
    var endRow = parseInt(numRows);
    var rowArray = [];
    var returnArray = [];
    var triVal;

    var triangle = function (row, col) {
        //base case
        if (col == 1 || col == row) {   //If the element is the either first or last element then initialize it with 1
            if (col == 1) {
                rowArray = [];
            }
            triVal = 1;
            rowArray.push(triVal);

            if (col == row) {
                returnArray.push(rowArray);
            }
        }
        else {
            //calc
            triVal = returnArray[row - 2][col - 2] + returnArray[row - 2][col - 1]
            triVal = typeof (triVal) === "undefined" ? 1 : triVal;
            rowArray.push(triVal);
        }
        if (col == row && row == endRow) { //stop the function and return                    
            console.log(JSON.stringify(returnArray));
            myDiv2.innerHTML = JSON.stringify(returnArray);
            return returnArray;                                
        }
        else {
            if (col == row) {
                col = 1;
                row = row + 1;
            } else {
                col = col + 1;
            }
            triangle(row, col);
        }
    }
    triangle(startRow, startCol);           
};  
var test = generate(4);
console.log('test is: ' + test); //Why does it returned undefined

我的第一个解决方案是函数 generate(numRows){};但作业要求解决方案采用表达式形式 var generate = function(numRows) {};第一种方法返回我的预期结果。第二个没有。我不了解 javascript 的哪些基本原理?

【问题讨论】:

  • 你有和if/else,其中只有一个有return 声明。从函数声明切换到函数表达式不会有任何区别。
  • 并且生成没有回报。
  • 您需要将返回的数据存储在某处。
  • 谢谢@RolandStarke 这么明显....现在。

标签: javascript function recursion expression undefined


【解决方案1】:
var generate = function (numRows) {

    //numRows == 0 ? numRows = 1 : numRows = numRows;
    if (numRows == 0) { return [];}

    var startRow = 1;
    var startCol = 1;
    var endRow = parseInt(numRows);
    var rowArray = [];
    var returnArray = [];
    var triVal;


    var triangle = function (row, col) {
        //base case
        if (col == 1 || col == row) {   //If the element is the either first or last element then initialize it with 1
            if (col == 1) {
                rowArray = [];
            }
            triVal = 1;
            rowArray.push(triVal);

            if (col == row) {
                returnArray.push(rowArray);
            }
        }
        else {
            //calc
            triVal = returnArray[row - 2][col - 2] + returnArray[row - 2][col - 1]
            triVal = typeof (triVal) === "undefined" ? 1 : triVal;
            rowArray.push(triVal);
        }
        if (col == row && row == endRow) { //stop the function and return                    
            console.log(JSON.stringify(returnArray));
            myDiv2.innerHTML = JSON.stringify(returnArray);
            return returnArray;                                
        }
        else {
            if (col == row) {
                col = 1;
                row = row + 1;
            } else {
                col = col + 1;
            }
            triangle(row, col);
        }
    }
    triangle(startRow, startCol);
    return returnArray;  //duh...the obvious answer!!! 
};  
var test = generate(1);
console.log('test is: ' + (JSON.stringify(test)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2014-08-28
    • 2017-01-21
    相关资源
    最近更新 更多