我的第一个动态规划程序(试图用递归求斐波拉契数)
来源:互联网 发布:windows api 删除文件 编辑:程序博客网 时间:2024/05/20 03:07
1、这是一般的递归(指数爆炸型,时间复杂度O(1.618^n)):
#include <iostream>#include <cstdio>using namespace std;__int64 Fib(int n){if(n == 1 || n == 2)return 1;return Fib(n - 1) + Fib(n - 2);}int main(void){int n;while(cin >> n)printf("%I64d\n", Fib(n));return 0;}
2、今天看了动态规划的入门,觉得建备忘表的方法挺不错的,也是符合人的思维的(这很重要),于是就类比,写了带备忘表的递归求斐波拉契数,这应该是以空间换时间吧,备忘表是全局的,一但建起,之后的就好办了。
#include <iostream>#include <cstdio>using namespace std;__int64 aFib[90] = {0};//aFib[] correspond to Fib(), and global!__int64 Fib(int n){if(n == 1 || n == 2)return 1;if(aFib[n - 1] == 0)//Fib(n-1) have been not calculatedaFib[n - 1] = Fib(n - 1);if(aFib[n - 2] == 0)//Fib(n-2) have been not calculatedaFib[n - 2] = Fib(n - 2);return aFib[n - 1] + aFib[n - 2];}int main(void){int n;while(cin >> n)printf("%I64d\n", Fib(n));return 0;}
这是我学习动态规划的第一个应用,纪念一下!虽然还没充分体现动态规划(求最优解)的魅力。继续学习中。。。
2012/4/8 更新
原来这种方法叫 搜索+动态规划,顺便简化了第二个程序:
#include <iostream>#include <cstdio>using namespace std;__int64 aFib[90] = {0, 1, 1};//aFib[] correspond to Fib(), and global!unsigned __int64 Fib(const unsigned int n){if(aFib[n] == 0)//Fib(n) have been not calculatedaFib[n] = Fib(n - 1) + Fib(n - 2);return aFib[n];}int main(void){int n;while(cin >> n)printf("%I64d\n", Fib(n));return 0;}
2012/5/11 更新
通项公式法,时空复杂度都是O(1)
#include <iostream>#include <cstdio>using namespace std;int main(void){int n;while(cin >> n)printf("%.0f\n", 0.4472135955 * pow(1.618033988745, n) );return 0;}
- 我的第一个动态规划程序(试图用递归求斐波拉契数)
- 动态规划问题数字三角形的(递归程序)
- 我的第一个程序
- 我的第一个程序
- 我的第一个程序
- 我的第一个程序
- 我的第一个程序
- 我的第一个程序
- 我的第一个程序
- 我的第一个程序
- 我的第一个程序
- 我的第一个程序
- 我的第一个程序
- 我的第一个程序
- 我的第一个程序
- 我的第一个程序
- 我的第一个程序
- 我的第一个程序
- STL_MAP容器常用操作
- SAP权限对象的创建与使用
- 中缀表达式转换为后缀表达式
- 单链表的插入和删除
- 敏捷开发一千零一问系列之十四:敏捷开发加班吗?
- 我的第一个动态规划程序(试图用递归求斐波拉契数)
- jQuery获取Select选择的Text和 Value
- Vim+cscope+ctags阅读源代码
- Microsoft Visual Studio 中应用程序访问SQL Server 数据库(C#语言编写)
- C++友元friend --c++利用friend修饰符,可以让一些你设定的函数能够对这些保护数据进行操作
- 高可用 Mysql 笔记
- mapX对图层的引用和创建实例
- office2007 打开Excel 提示 工作表中的公式包含一个或多个无效引用的解决方法
- CEvent事件跟线程的使用