我需要用帮助行实现递归函数指数函数(e^x)泰勒:e^x = 1 + x + x2/2!+ x3/3!+ ...但我无法理解我做错了什么我有下一个代码:
function fact(n){
return n * fact(n - 1);
}
function myPow(x, n){
return x * myPow(x, n - 1);
}
function expon(x ,n){
if(n == 1){
return expon(x, n - 1) * x;
}
else{
return expon(x, n - 1) + (myPow(x, n)/fact(n));
}
}
console.log(expon(1, 10));
你的阶乘函数没有基本情况。
function fact(n) {
if (n == 1)
return 1;
if (n < 1)
return 0;
return n * fact(n - 1);
}
myPow
需要类似的更改。虽然由于幂很有趣,但我认为如果 n == 0 返回 1。
您的代码应如下所示:
function fact(n){
if (n == 1)
return 1;
return n * fact(n - 1);
}
function myPow(x, n){
if(n == 1)
return n;
return x * myPow(x, n - 1);
}
function expon(x ,n){
if(n == 1){
return 1;
}
else{
return expon(x, n - 1) + (myPow(x, n)/fact(n));
}
console.log(expon(1, 10));
这看起来像一个赋值,所以我不会调试你的代码,但会给你一些提示。
您似乎不明白递归如何以最终给出结果而告终。
您必须提供一个简单的情况,其中使用非递归调用返回值。
有时你不写任何if
(不好!),有时有一个if
,但这两种情况都使用递归调用。
这将解决您的问题:
function fact(n) {
if (n == 1) return 1;
return n * fact(n - 1);
}
function myPow(x, n) {
if (n == 0) return 1;
return x * myPow(x, n - 1);
}
function expon(x, n) {
if (n == 0) return 1;
return expon(x, n - 1) + myPow(x, n) / fact(n);
}
console.log(expon(1, 10));