[算法]斐波那契

#include <iostream>
#include <cmath>

using namespace std;

//2.斐波那契--递归版本
//fn=1;当n=0,1
//fn=fn-1+fn-2;当n>1
//算法复杂度O(2^n)
static int fibonacci(int n)
{
    if (n<=1) return 1;
    return fibonacci(n - 1) + fibonacci(n - 2);
}
//2.斐波那契--非递归版本
//1/sqrt(5) ( pow((1+sqrt(5))/2,n+1) - pow((1-sqrt(5))/2,n+1)  )
//算法复杂度O(1)
static int fibonacci_iter(int n)
{
    return 1 / sqrt(5) *  (pow((1 + sqrt(5)) / 2, n + 1) - pow((1 - sqrt(5)) / 2, n + 1));
}

int main()
{
    cout<<fibonacci(5)<<endl;
    cout<<fibonacci_iter(5)<<endl;
    cout << "hello world" << endl;
    return 0;
}

原文地址:https://www.cnblogs.com/tailiang/p/11712843.html

时间: 2024-12-24 06:07:12

[算法]斐波那契的相关文章

最优化算法-斐波那契数列搜索

斐波那契数列搜索,参考Edwin<最优化导论>第四版7.3章节,算法采用go语言实现. /***************************************** * FileName : fibonacci_search.go * Author : fredric * Date : 2017.09.01 * Note : 斐波那契数列搜索算法 * History : *****************************************/ package search

js算法集合(二) javascript实现斐波那契数列 (兔子数列) Javascript实现杨辉三角

js算法集合(二)  斐波那契数列.杨辉三角 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列和杨辉三角进行研究,来加深对Javascript的理解. 一.Javascript实现斐波那契数列 ①要用Javascript实现斐波那契数列,我们首先要了解什么是斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为

《BI那点儿事》Microsoft 时序算法——验证神奇的斐波那契数列

斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368斐波那契数列的发明者,是意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍贯是比萨.他被人称作“比萨的列昂纳多”.1202年,他撰写了<算盘全书>(Liber Abacci)一书.他是第一个研究了

算法笔记_001:斐波那契数的多种解法

本篇文章解决的问题来源于算法设计与分析课程的课堂作业,主要是运用多种方法来计算斐波那契数.具体问题及解法如下: 一.问题1: 问题描述:利用迭代算法寻找不超过编程环境能够支持的最大整数的斐波那契数是第几个斐波那契数.(Java: 231-1 for int, 263-1 for long) 解决方案:针对问题1,此处要使用迭代法来解决,具体实现代码如下: //用迭代法寻找编程环境支持的最大整数(int型)的斐波那契数是第几个斐波那契数 public static int max_int_iter

斐波那契数列公式算法-JS实现

之前算斐波那契数列都是算前两个数相加实现的 比如0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368 2=1+1 3=1+2 5=2+3 8=3+5 …… 其实还有另外一个规律: 2 = 1*2-03 = 2*2-15 = 3*2-18 = 5*2-213= 8*2-321=13*2-5 …… 下面是JS实现的代码: <!DOCTYPE h

算法学习笔记 递归之 快速幂、斐波那契矩阵加速

递归的定义 原文地址为:http://blog.csdn.net/thisinnocence 递归和迭代是编程中最为常用的基本技巧,而且递归常常比迭代更为简洁和强大.它的定义就是:直接或间接调用自身.经典问题有:幂运算.阶乘.组合数.斐波那契数列.汉诺塔等.其算法思想: 原问题可分解子问题(必要条件): 原与分解后的子问题相似(递归方程): 分解次数有限(子问题有穷): 最终问题可直接解决(递归边界): 对于递归的应用与优化,直接递归时要预估时空复杂度,以免出现用时过长或者栈溢出.优化递归就是以

算法——动态规划篇——斐波那契数列

斐波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理.准晶体结构.化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1960年代起出版了<斐波纳契数列>季刊,专门刊载这方面的研究成果. 以上内容来自百度百科.. 今天主要是想用动态规划的思想求解斐波那契数列,用来观察动态规划带来的优势,空间换时间,不重复求解

斐波那契 递推算法

/***Date : 2014.12.10***/ //递推算法:是理性思维模式的代表,根据已有的数据和关系,逐步推导而得出结果. //执行过程:1)根据已知的结果和关系,求解中间结果. ///////////////////// 2)判断是否满足要求,若未满足,则继续根据已知结果和关系求解中间结果:若满足要求,则表示寻找到一个正确答案. //13世纪,意大利数学家斐波那契的<算盘书>中记载:兔子产仔问题. //一对两个月大的兔子,每月都可产仔一对,小兔子两月后的每月也可产仔一对;即1月生,3

算法题---k阶斐波那契数列

#include <iostream> #include <cstdio> #include <stdlib.h> #include <algorithm> using namespace std; int main() { int a[120]; int k, m; while (1) { cout << "输入阶数k和约定的常数max.k和max用空格分开." << endl; cin >> k &