【问题标题】:Recursive function exponential function递归函数 指数函数
【发布时间】:2016-05-10 13:27:44
【问题描述】:

我需要在 Taylor 行的帮助下实现递归函数指数函数 (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));

【问题讨论】:

  • 你的阶乘函数没有边界。当n == 1 返回 1 时,您应该在其中包含 if 语句。否则它将无限期地继续。
  • 我很确定 expon 函数会无穷大。您需要有另一个 if else 语句,说明当 n = 0 时返回 1,因为 e^0 = 1,然后它将递归地一直返回链。

标签: javascript function recursion taylor-series


【解决方案1】:

您的阶乘函数没有基本情况。

function fact(n) {
  if (n == 1)
    return 1;
  if (n < 1)
    return 0;
  return n * fact(n - 1);
}

myPow 需要进行类似的更改。虽然由于权力很有趣,但我认为如果 n == 0 返回 1。

【讨论】:

    【解决方案2】:

    您的代码应如下所示:

    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));
    

    【讨论】:

    • 我添加了它,但是它没有解决问题。我在控制台中有下一个错误:“未捕获 RangeError:超出最大调用堆栈大小”
    • 我忘了提到 myPow 方法中的 if 语句。
    • @S.Hagvin 您应该将此标记为答案,因为它适合您
    • Jonas Meierz 抱歉,我不知道。我只学这个资源
    【解决方案3】:

    这看起来像一个作业,所以我不会调试你的代码,但会给你一些提示。

    您似乎不明白递归如何以最终给出结果而结束。

    你必须提供一个简单的例子,通过非递归调用返回一个值。

    有时你不写任何if(糟糕!),有时还有if,但两种情况都使用递归调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2023-04-02
      • 2015-03-01
      相关资源
      最近更新 更多