Fibonacci sequence: Difference between revisions

→‎{{header|Mathematica}} / {{header|Wolfram Language}}: simplification of more efficient recursive and iterative....
(→‎{{header|Python}}: new section on faster recursion not requiring memoization, and its limits...)
(→‎{{header|Mathematica}} / {{header|Wolfram Language}}: simplification of more efficient recursive and iterative....)
Line 3,145:
 
<lang mathematica>fibi[prvprv_Integer, prv_Integer, rm_Integer] :=
If[rm < 1, prvprv + prv, fibi[prv, prvprv + prv, rm - 1]]
fib[0n_Integer] := fibi[0;, 1, n]</lang>
fib[1] = 1;
fib[n_Integer] := fibi[0, 1, n - 2]</lang>
 
However, the recursive approaches in Mathematica are limited by the limit set for recursion depth (default 1024 or 4096 for the above cases), limiting the range for 'n' to about 1000 or 2000. The following using an iterative approach has an extremely high limit (greater than a million):
 
<lang mathematica>fib[0n_Integer] := Block[{tmp, prvprv = 0;, prv = 1},
For[i = 20, i < n, i++, tmp = prv; prv += prvprv; prvprv = tmp];
fib[1] = 1;
Return[prvprv + prv]]</lang>
fib[n_Integer] := Block[{tmp, prvprv = 0, prv = 1},
For[i = 2, i < n, i++, tmp = prv; prv += prvprv; prvprv = tmp];
Return[prvprv + prv]]</lang>
 
If one wanted a list of Fibonacci numbers, the following is quite efficient:
474

edits