我一直在玩 wolfram 语言并注意到一些事情:以不同方式编写的相同函数在时间方面的工作方式非常不同。
考虑这两个函数:
NthFibonacci[num_] :=
If [num == 0 || num == 1, Return[ 1],
Return[NthFibonacci[num - 1] + NthFibonacci[num - 2]]
]
Fibn[num_] := {
a = 1;
b = 1;
For[i = 0, i < num - 1, i++,
c = a + b;
a = b;
b = c;
];
Return [b];
}
NthFibonacci[30]
评估大约需要 5 秒。
Fibn[900 000]
也需要大约 5 秒来评估。
内置也是如此Fibonacci[50 000 000]
我根本不明白为什么三者之间的速度有如此大的差异。理论上,递归应该或多或少等同于 for 循环。这是什么原因造成的?