斐波那契数(递归实现)
int F(int i)
{
if(i < 1)
return 0;
if(i == 1)
return 1;
return F(i-1)+F(i-2);
}
我们可以按从最小开始的顺序计算计算所有函数值来求任何类似函数的值在每一步使用先前已经计算出来的值来计算当前值.我们称这项技术为自底向上的动态规划.这是一个算法设计的技术已广泛成功应用于许多问题的求解中.我们必须注意一个简单技巧,以便能把算法从指数级运行时间向线性运行时间改进. 自顶向下的动态规划甚至是一个更简单的技术这项技术允许我们执行递归函数的代价与自底向上的动态规划一样(或许更小),但它的计算是自动的.我们实现递归程序来存储它所计算的每一个值(正如它最末的步骤),并通过检查所存储的值,来避免重新计算它们中的任何项(正如它最初的步骤).自顶向下的动态规划有时也称为备忘录法
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <malloc.h>
using namespace std;
#define OK 1
#define ERROR -1
#define TRUE 1
#define FALSE 0
typedef int Status;
int a[50];
int F(int i)
{
int t;
if(a[i])
return a[i];
if(i == 0)
t = 0;
if(i == 1)
t = 1;
if(i > 1)
t = F(i - 1) + F(i - 2);
return a[i] = t;
}
int main()
{
printf("%d",F(44));
return 0;
}