還拿斐波那契函數舉例:
遞歸:
int fib(int n){ if(n>1) return fib(n-1) + fib(n-2); else return n; // n = 0, 1時給出recursion終止條件 }
而動態規划:
F[0] = 0;F[1] = 1; for(i = 2; i <= N; i++) F[i] = F[i-1] + F[i-2];
看完,是不是覺得和迭代很像?沒錯
這里,動態規划和迭代在實現上是一樣的。(其他地方可能就不一樣。。)
。總結:能用動態規划或者迭代,就不用遞歸,因為遞歸太耗堆棧了。效率不高。