22 lines
514 B
Plaintext
22 lines
514 B
Plaintext
Procedure Fibonacci(n)
|
|
Static NewMap Fib.i()
|
|
Protected FirstRecursion
|
|
|
|
If MapSize(Fib())= 0 ; Init the hash table the first run
|
|
Fib("0")=0: Fib("1")=1
|
|
FirstRecursion = #True
|
|
EndIf
|
|
|
|
If n >= 2
|
|
Protected.s s=Str(n)
|
|
If Not FindMapElement(Fib(),s) ; Calculate only needed parts
|
|
Fib(s)= Fibonacci(n-1)+Fibonacci(n-2)
|
|
EndIf
|
|
n = Fib(s)
|
|
EndIf
|
|
If FirstRecursion ; Free the memory when finalizing the first call
|
|
ClearMap(Fib())
|
|
EndIf
|
|
ProcedureReturn n
|
|
EndProcedure
|