我一直在玩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循環。這是什麼造成的?
「理論上,遞歸應該或多或少地等於for循環」:這通常不是真的,只適用於尾遞歸變換的特殊情況由編譯器在迭代中。 – Renzo