普通fibonacci: function fibonacci(n) { return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); }調(diào)用棧應(yīng)該是這樣,第 5 項(xiàng)調(diào)用棧長(zhǎng)度就有 8 了,很容易長(zhǎng)度很大造成棧溢出:[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)]改為尾遞歸方式調(diào)用棧應(yīng)該一直是1個(gè)長(zhǎng)度,不知道對(duì)不對(duì)?:但當(dāng)我調(diào)用 fibonacci2(10000) 時(shí)還是會(huì)報(bào)Uncaught RangeError: Maximum call stack size exceeded錯(cuò)誤,這是為什么呢?
為什么使用尾遞歸也會(huì)爆棧?
米脂
2018-10-10 13:18:07