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

  • 相关阅读:
    谷粒商城心得(四)
    centos7设置rc.local开机执行命令
    密码学简介
    如何解决 kubernetes 重启后,启来不来的问题
    谷粒商城安装ES及入门(十六)
    谷粒商城读写分离(十五)
    谷粒商城创建mysql主从(十四)
    虚拟机LVM在线扩容
    Builder 模式初探
    Mysql 导入实战
  • 原文地址:https://www.cnblogs.com/xwz0528/p/4524406.html
Copyright © 2011-2022 走看看