【问题标题】:What is causing this recursion limit error?是什么导致了这个递归限制错误?
【发布时间】:2015-05-02 17:01:40
【问题描述】:

此代码生成正确答案,但生成错误消息。为什么递归级别会超过30?)

感谢您的帮助。

Clear[f];
f[0] = 1000000;
f[x_] := f[x] = f[x - 1]*1.05 - 41000;

f[10]

Out[143]= 1.1132*10^6

In[144]:= f[30]

Out[144]= 1.59795*10^6

【问题讨论】:

  • 这是哪种编程语言?
  • 未发现错误。使用Quit[] 清除会话并重试。
  • 就是这样。实际上,我没有清除会话,但是在我稍微摆弄 $RecursionLimit 之后,错误消息就消失了。谢谢。

标签: function recursion wolfram-mathematica


【解决方案1】:

让我们评估 f[100]。第一条规则f[0]=... 不适用,但下一条规则,即f[x_] = ... 则适用。我们看到 x_ 匹配 100。所以现在 x 绑定到 100。右侧的结果是:f[x]=f[x-1]*1.05,由于 x 是 100,我们需要评估:f[100]=f[100-1]*1.05 这是与f[100]=f[99]*1.05 相同。为了将两侧与=进行比较,我们需要先评估两侧。综上所述,f[100] 的值取决于f[99] 的值。如果执行相同的步骤,我们会看到 f[99] 依赖于 f[98] 依赖于 f[97] 等等,直到达到 f[0]。

现在上述步骤不一定与 Mathematica 经历的步骤相同,因此步骤数可能与 Mathematica 需要经历的步骤不完全相同。它也可能将调用= 视为一个步骤[我不是 100% 确定]。文档中描述了实际的评估规则,但有些涉及。

【讨论】:

    猜你喜欢
    • 2011-08-13
    • 2012-10-06
    • 2012-09-21
    • 2010-10-12
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多