斐波那契数列 递推 递归 备忘录 动态规划
生活随笔
收集整理的這篇文章主要介紹了
斐波那契数列 递推 递归 备忘录 动态规划
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
當(dāng)n=0時(shí),f(n) = 0 ? ??
當(dāng)n=1時(shí),f(n) = 1
當(dāng)n>1時(shí),f(n) = f(n-1) + f(n-2)
遞歸算法:
[cpp]?view plaincopy
備忘錄方法:
[cpp]?view plaincopy
由于計(jì)算的時(shí)候只需要前兩個(gè)數(shù)即可,所以代碼還可以繼續(xù)優(yōu)化。但是對(duì)于上述的備忘錄方法貌似不能繼續(xù)進(jìn)行空間優(yōu)化了(不知道對(duì)否,如果理解的不對(duì)請(qǐng)不吝賜教~)。
但是對(duì)于下面的方法(就稱為遍歷方法吧),還是可以繼續(xù)優(yōu)化的。 ?自底向上的動(dòng)態(tài)規(guī)劃
[cpp]?view plaincopy
斐波那契數(shù)(動(dòng)態(tài)規(guī)劃)通過把所計(jì)算的值存儲(chǔ)在遞歸過程的外部數(shù)組中,明確地避免重復(fù)計(jì)算。這一程序計(jì)算的時(shí)間與N成正比。int F(int i){if(knownF[i] != unknown)return knownF[i];if(i == 0) t = 0;if(i == 1) t = 1;if(i > 1) t = F(i - 1) + F(i - 2);return knownF[i] = t;}
自頂向下的動(dòng)態(tài)規(guī)劃
由于計(jì)算的時(shí)候只用了前兩個(gè)數(shù),所以沒有必要使用數(shù)組。
[cpp]?view plaincopy
總結(jié):從代碼中可以看出來,遍歷方法實(shí)際上是一種自底向上的方法,而備忘錄方法是一種自頂向下的方法,也許正由于這個(gè)原因造成了備忘錄方法無法進(jìn)行空間優(yōu)化。(待證)
總結(jié)
以上是生活随笔為你收集整理的斐波那契数列 递推 递归 备忘录 动态规划的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “斐波那契数列”的两种算法
- 下一篇: python实现自顶向下,自底向上