普通fibonacci: function fibonacci(n) { return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); }調用棧應該是這樣,第 5 項調用棧長度就有 8 了,很容易長度很大造成棧溢出:[fibonacci(5)] [fibonacci(4) + fibonacci(3)] [(fibonacci(3) + fibonacci(2)) + (fibonacci(2) + fibonacci(1))] [((fibonacci(2) + fibonacci(1)) + (fibonacci(1) + fibonacci(0))) + ((fibonacci(1) + fibonacci(0)) + fibonacci(1))] [fibonacci(1) + fibonacci(0) + fibonacci(1) + fibonacci(1) + fibonacci(0) + fibonacci(1) + fibonacci(0) + fibonacci(1)]改為尾遞歸方式調用棧應該一直是1個長度,不知道對不對?:但當我調用 fibonacci2(10000) 時還是會報Uncaught RangeError: Maximum call stack size exceeded錯誤,這是為什么呢?
為什么使用尾遞歸也會爆棧?
米脂
2018-10-10 13:18:07