Just ramping up on Motoko and testing some language features. I wrote a function to return the n-th Fibonacci number.
Here’s the function:
func fibonacci(n: Nat): Nat {
if (n == 0) {
return 0;
};
if (n == 1) {
return 1;
};
return fibonacci(n-1) + fibonacci(n-2);
};
I first tried running it in the live preview in the interactive tutorial and found it fails to return for numbers > 19. The error is: cancelled: interpreter reached step limit
So next, I tried running it from a local canister. I had to modify the code slightly to make the function async
and await
responses when called recursively. I was able to go beyond the 19th number but find it takes exponentially long to return a respond beyond n > 15 or so.
From these tests it appears recursion should not be used heavily?