使用 While 和 Module 命令的 Mathematica、斐波那契数列
我如何编写一个计算 f[n] 的程序(对于斐波那契数:f[n]=f[n]-f[n-2],其中 f[0] = 任何数字)使用 模块
和一个While
循环?
How can i write a program that computes f[n] (for Fibonacci numbers:f[n]=f[n]-f[n-2], with f[0] = any number) using Module
and a While
loop?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
家庭作业?我希望你通过例子学习。 ;-)
您的主题行说递归,但您没有在问题中指定这一点;相反,您可以指定
Module
和While
。我会选择后者。Homework? I hope you learn by example. ;-)
Your subject line says recursion, but you don't specify that in your question; rather, you specify
Module
andWhile
. I'll go with the latter.如果您想给老师留下深刻印象,我会使用内存缓存方法。它比 Sjoerd 描述的方法要快得多。
考虑这个实现
让我们比较两者,只是为了证明我的观点。
这是运行时间的比较:
运行时间要高得多,因为递归函数
生成 n^2 次递归调用(如果没有意义,请将其写在纸上)。另一方面,定义
利用内存缓存来计算项,这会导致运行时间显着加快,因为每次调用都会生成 fib[x] 的缓存值。
If you're trying to impress your instructor, I would use the memory cache approach. It is significantly faster than the approach Sjoerd is describing.
Consider this implementation
Lets compare the two, just to prove my point.
Here's the comparison in runtimes:
The runtime is so much higher because the recursive function
generates n^2 recursive calls (write it out on paper if that doesn't make sense). On the other hand, defining
takes advantage of memory caching to calculate the terms, which results in a drastically faster runtime, since each call generates a cached value for fib[x].
根据标题的第一部分,以下方法是如何做到这一点的示例:
Going by the first part of your title, the following approach would be an example of how to do that: