从斐波那契数列(Fibonacci)看动态规划

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lishang6257/article/details/79670990

先在这里占个坑,周末在补,代码先贴上去

1.动态规划基本描述

2.Fibonacci数列

3.问题分析

4.问题求解

5.递归,迭代对比

6.代码实现

#include <iostream>
#include <vector>
using namespace std;

//递归
int fibonacci1(int n){
    if( n == 1 || n == 2 ) {
        return 1;
    }else {
        return fibonacci1(n - 1) + fibonacci1( n - 2 );
        cout << fibonacci1(n - 1) + fibonacci1( n - 2 ) << " ";
    }
}

//非递归(迭代)
int fibonacci2(int n){
    if(n == 1 || n == 2) return 1;
    int next = 0,pre = 1,now = 1;
    for(int i = 3;i <= n;i ++) {
        next = pre + now;
        pre = now;
        now = next;
    }
    return next;
}

//动态规划
int fibonacci3(int n,int a[50]){
    //这里只求前50
    a[0] = 1;a[1] = 1;
    if(n == 1 || n == 2) return a[n -1];
    return (a[n-2] == 0 ? fibonacci3(n - 1,a) : a[n-2])  + (a[n-3] == 0 ? fibonacci3(n - 2,a) : a[n-3]) ;
}

int main()
{
    int a[50];
    for(int i = 0;i < 50;i ++) a[i] = 0;
    int i = 10;
    cout << fibonacci3(i,a) << " " << fibonacci2(i) << " " << fibonacci1(i);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/lishang6257/article/details/79670990
今日推荐