定義fib()如下:
int fib(int n) { count ++; if (n==0) return 1; else if (n==1) return 1; else return fib(n-1) + fib(n-2); }
由原來fib的地推公式得出求解次數的地推公式。
那么Count(fib(10)) = count(fib(9)) + count(fib(8)) + 1;
求解count( fib(n) ) 的次數,就是計算fib(n)遞歸樹(是一個二叉樹),葉子結點的個數。
count( fib(0) ) = 1
count( fib(1) ) = 1
count( fib(2) ) = count ( fib(1) ) + count( fib(0) ) + 1 = 3
count( fib(3) ) = count ( fib(2) ) + count( fib(1) ) + 1 = 3+1+1 = 5
這個樣子計算的還是很快的
fib(10),一共調用了 177次。
其實上面是360的一道面試題