《计算机程序的构造和解释》读书笔记之斐波那契数列
斐波那契数列作为树形递归的例子,本书指出了缺点:虽然它是树形递归的经典范例,但是用递归求斐波那契数是很烂的方法。因为产生了过多的冗余的计算。(请见译书第25页)
TopLanguage组的Li Yang言:在阅读《代码大全》的递归一节的CODING HORROR那段,作者强调不要用递归去计算阶乘或者斐波那契数列,因为这种用法速度缓慢,而且内存使用无法预测,且可读性差。
在TopLanguage组中本人只潜水,而本人在实际情况中,IronScheme解释器、JavaScript控制台、C# 2005 编译器进行了试验。试验的过程是将斐波那契数测试,测试的数值越来越大。
结果:JavaScript控制台最先出局,IronScheme 解释器比 C# 2005 编译器慢,这是没办法的--编译比解释要快,而不是尾递归这个“优化编译”的原因。
下面是用JavaScript语言编写的斐波那契数列的程序:
var fib = function(n) { if (n == 0) return 0; if (n == 1) return 1; else { return arguments.callee(n - 1) + arguments.callee(n - 2); } } var fibObj = fib(7); console.log(fibObj);