从递归函数返回未定义

时间:2013-11-16 12:45:08

标签: javascript

我在JavaScript中定义了以下函数:

        function rfactorial(n, f) {
            if (n == 0) {
                return f;
            }
            rfactorial(n-1, f*n);
        }

        function dofactorial(){
            var n = prompt("Enter number");
            var f = rfactorial(parseInt(n), 1);
            alert("Factorial = " + f);

            if (confirm("Do another one?")) {
                dofactorial();
            }
        }

问题在于dofactorial()fundefined。这很奇怪,因为如果我检查frfactorial()的值,它就会在return之前正确计算出来。我做错了什么?

3 个答案:

答案 0 :(得分:2)

function rfactorial(n, f) {
        if (n == 0) {
            return f;
        }
       return rfactorial(n-1, f*n);
    }

    function dofactorial(){
        var n = prompt("Enter number");
        var f = rfactorial(parseInt(n), 1);
        alert("Factorial = " + f);

        if (confirm("Do another one?")) {
            dofactorial();
        }
    }

    dofactorial()

注意返回rfactorial(n-1,f * n); 你忘记了回归

答案 1 :(得分:0)

尝试将代码修改为:

01| function rfactorial(n, f) {
02|    if (n == 0) {
03|       return f;
04|    }
05|    return new rfactorial(n-1, f*n);
06| }
07| function dofactorial(){
08|    var n = prompt("Enter number");
09|    var f = rfactorial(parseInt(n), 1);
10|   alert("Factorial = " + f);
11|    if (confirm("Do another one?")) {
12|    dofactorial();
13|   }
14| }

在第3行,您有两个选项return new rfactorial(n-1, f*n);return new rfactorial(n-1, f*n);。两者都有效。

答案 2 :(得分:0)

关键是你在递归调用函数之前忘了写return

要递归调用函数,需要将它的值赋给某个​​变量或某个参数(它取决于逻辑)。在你的情况下,你正在调用rfactorial()但是当它出现在递归调用的一部分时,它不会返回值。所以你必须把回报放在那里。

function rfactorial(n, f) {
        if (n == 0) {
            return f;
        }
       return rfactorial(n-1, f*n);  // here you forgot to include return keyword
    }

    function dofactorial(){
        var n = prompt("Enter number");
        var f = rfactorial(parseInt(n), 1);
        alert("Factorial = " + f);

        if (confirm("Do another one?")) {
            dofactorial();
        }
    }

    dofactorial();

这是有效的FIDDLE.