我在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()
,f
是undefined
。这很奇怪,因为如果我检查f
中rfactorial()
的值,它就会在return
之前正确计算出来。我做错了什么?
答案 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.