Jon*_*Jon 6 performance wolfram-mathematica fibonacci
f[0] = 0;
f[1] = 1;
f[x_] := f[x-1] + f[x-2]
Run Code Online (Sandbox Code Playgroud)
这个功能在Mathematica中运行缓慢,我需要提高速度.我必须使用函数式编程和递归.我不确定为什么这么慢,甚至最轻微的想法如何改善这将是有帮助的.
编写更快的递归函数的好方法是让它记住以前的值.当然,这确实以内存为代价,但在这种情况下它可以提供帮助.为了计算f[x]
,你计算f[x-1]
和f[x-2]
- 然后计算f[x-1]
,你f[x-2]
再次计算; 你最终会重新计算很多价值.(原谅我的不精确!)
要随时存储东西,你可以使用这个成语:
f[x_] := ( f[x] = (* calculation of f[x] goes here *) )
Run Code Online (Sandbox Code Playgroud)
编辑:我在这台机器上没有mathematica,但我很确定这不会计算出错误的值.
f[0] = 0;
f[1] = 1;
f[x_] := ( f[x] = f[x-1] + f[x-2] );
f[256]
Run Code Online (Sandbox Code Playgroud)
就像我在下面的评论中所说,如果你有其他的定义f
,你可能想先用它们擦除它们Clear[f]
.
感谢rcollyer:小心$RecursionLimit
!它默认为256.(当然,这是有充分理由的.真的很深的递归通常是一个坏主意.)