Can someone hep me find an algorithm for a recursive function func(int k) to return 3^k in only n+1 calls where k is in the range [ 3^n, 3^(n+1) )
For example, the function should return 3^1 or 3^2 in 1 call, 3^3, 3^4, .., 3^8 in 2 calls, 3^9, 3^10 .. in 3 calls and so on.
Here is the algorithm in untested C/C++:
(I have not compiled, run, or otherwise tested this code. There may be syntax errors and other bugs. But it’s sufficient to get the point across.)
What’s different about this algorithm is that it recurses by dividing by 3 instead of 2. This function is rather ugly by necessity, as abstracting away some of the pattern would likely involve more recursion. Still, this algorithm is now O(log3n). Here’s a table of a given x from 1-50 and the number of recursive calls required (as a two-element lisp list):
You can see that even as we get up over 100 it only take 4 recursive calls.