zoukankan      html  css  js  c++  java
  • 斐波那契数列

    问题描述

    F(0)=0,

    F(1)=1,

    F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)

    算法实现

    动态规划实现:

    #include <iostream>
    using namespace std;
    
    /*
    *	动态规划?!!
    *	输入:n = 0,1,2,...
    *	输出:f(n)
    */
    long fibonacci(unsigned n)
    {
    	int result[2] = { 0, 1 };
    	if (n < 2) return result[n];
    
    	long fibNMinusOne = 1;
    	long fibNMinusTwo = 0;
    	long fibN = 0;
    	for (unsigned int i = 2; i <= n; i++)
    	{
    		fibN = fibNMinusOne + fibNMinusTwo;
    
    		fibNMinusTwo = fibNMinusOne;
    		fibNMinusOne = fibN;
    	}
    	return fibN;
    }
    
    int main()
    {
    	int a[45] = { 0 }; // 初始化
    	// 0 1 1 2 3 5 8 13 21 34 55...
    	cout << fibonacci(40) << endl; // 102334155
    	getchar();
    	return 0;
    }

    备忘录方法实现:

    #include <iostream>
    using namespace std;
    
    /*
    *	备忘录方法
    *	输入:n = 0,1,2,...
    *	输出:f(n)
    */
    long fibonacci(int a[], unsigned n)
    {
    	if (a[n] != 0) //
    	{
    		return a[n];
    	}
    	if (n == 0)
    	{
    		return 0;
    	}
    	if (n == 1)
    	{
    		return 1;
    	}
    	a[n] = fibonacci(a, n - 1) + fibonacci(a, n - 2);
    	return a[n];
    }
    
    int main()
    {
    	int a[45] = { 0 }; // 初始化
    	// 0 1 1 2 3 5 8 13 21 34 55...
    	cout << fibonacci(a, 40) << endl; // 102334155
    	getchar();
    	return 0;
    }

    其它可用动态规划求解的问题

    1. 最长公共子序列

    2. 0-1背包问题

    0-1背包问题属于0-1型整数规划问题,它可以用动态规划算法求解,也可以用回溯法或分支限界法求解,但它不能用贪心算法求解,因为无法保证最终能将背包装满,部分闲置的背包空间使每千克背包空间的价值降低了。

  • 相关阅读:
    小能客服
    bootstrap 字体图标
    在线绘图(PS)(海报)
    UI教程
    免费在线设计网站
    测量史上首个易语言工程测量模块
    在ado.net中实现oracle存储过程调用两种方式
    VS一些快捷键
    解决Win10家庭版没有‘本地用户和组’问题
    参照示例搭建一个Quertz + Topshelf的一个作业调度服务(基础)
  • 原文地址:https://www.cnblogs.com/xwz0528/p/4524406.html
Copyright © 2011-2022 走看看