首页 > 编程语言 >算法设计与分析(斐波那契数列

算法设计与分析(斐波那契数列

时间:2024-09-19 12:23:58浏览次数:12  
标签:数列 递归 实现 斐波 那契 定义



目录

  • 斐波那契数列的递归实现
  • 斐波那契数列的定义
  • 递归实现
  • 注意事项
  • 小结:


斐波那契数列的递归实现

在编程中,斐波那契数列是一个非常著名的序列,它通常定义为每个数字(从第3个数字开始)都是前两个数字的和,且前两个数字分别是0和1。

斐波那契数列的定义

在本实现中,斐波那契数列的定义略有不同,具体为:

  • n == 0 时,返回 1。
  • n == 1 时,也返回 1。
  • n == 2 开始,每个数都是前两个数的和。

递归实现

下面是使用递归方法实现这个非标准斐波那契数列的C++代码:

#include<iostream>  
  
using namespace std;  
  
int fibonacci(int n){  
	// 边界条件  
	if (n == 0){  
		return 1;  
	}  
	else if (n == 1){  
		return 1;  
	}  
	  
	// 递归调用  
	return fibonacci(n-2) + fibonacci(n-1);  
}  
  
int main() {  
	cout << "斐波那契数列的第3个数是: " << fibonacci(3) << endl;  
	return 0;  
}

注意事项

效率问题:递归实现虽然简洁,但对于较大的 n 值,其效率非常低,因为它会重复计算很多子问题。对于实际应用,建议使用迭代方法或带有备忘录的递归方法(也称为动态规划)来提高效率。

非标准定义:本实现中的斐波那契数列定义与标准定义不同,因此在与其他斐波那契数列相关的算法或问题时,需要特别注意这一点。

边界条件:由于起始条件的不同,这个实现产生的数列将是一个非标准的斐波那契数列。

标签:数列,递归,实现,斐波,那契,定义
From: https://blog.51cto.com/u_16672541/12055838

相关文章

  • P2710 数列/P2042 [NOI2005] 维护数列
    题意(以P2710为例)思路使用FHQ-Treap进行求解,清晰明了。对于insert,先将要插入的数建成一棵树,然后将这棵树放入FHQ-Treap中。对于delete,将要删除的树分离出来,然后把剩下的部分合并即可,将删除的树的树根丢到废弃节点的栈中以备以后使用(节约空间,不然MLE)。对于reverse,......
  • 打卡信奥刷题(769)用Scratch图形化工具信P5722[普及组/提高组] 【深基4.例11】数列求和
    【深基4.例11】数列求和题目描述计算1+2+3+⋯......
  • P2201 数列编辑器(对顶栈)
    include<bits/stdc++.h>usingnamespacestd;definexfirstdefineysecondtypedefpair<int,int>PII;typedeflonglongll;typedefunsignedlonglongull;typedefunsignedintuint;typedefvectorVS;typedefvectorVI;typedefvector<vect......
  • [ZZULIOJ] 1041: 数列求和2 (两种方法)
    1.题目描述输入一个整数n,输出数列1-1/3+1/5-……前n项的和。输入:输入只有一个整数n。输出:结果保留2为小数,单独占一行。样例输入Copy3样例输出Copy0.872.方法一#include<iomanip>#include<iostream>usingnamespacestd;doublek=1,i,sum=0;intn;intma......
  • 高等数学 1.2数列的极限
    目录数列极限的定义数列的概念数列极限的定义收敛数列的性质数列极限的定义数列的概念如果按照某一法则,对每个\(n\in\mathbb{N}_+\),对应着一个确定的实数\(x_n\),这些实数\(x_n\)按照下标\(n\)从大到小排列得到的一个序列\[x_1,x_2,x_3,\cdots,x_n,\cdots,\]就......
  • 数列分块入门
    分块是一种优秀的思想。“数据”是分块的目的。不同于大多数树形数据结构,分块中访问数据是容易的,因此,它可以用比前者更简单的方式支持复杂的操作。“标记”是分块最重要的过程。不同于大多数树形数据结构,分块大多数时候不需要支持标记与标记合并,因此,它能完成一些前者不能完成的......
  • PAT乙级 1030 完美数列 测试点3.4
    一、题目二、代码#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;boolcmp(longlonga,longlongb){ returna<b;}intmain(){ longlongn,p; cin>>n>>p; longlongnum=0,temp=0; ve......
  • 超越常规:斐波那契数列的极速计算技术3
    针对斐波那契数列算法进行详细介绍和优化,从最简单的递归方法到更高效的迭代、缓存、动态规划、公式推导和矩阵解法,最终达到了时间复杂度为O(logn)的快速幂矩阵解法来感受算法的神奇之处,最后可以看到如何实现在输入n=2100000000(21亿)时仅耗时0.02毫秒的最佳效果。一、回顾斐波......
  • 例2.12 分别编写求n!和输出斐波那契数列的函数,并用两个函数进行测试
    例2.12分别编写求n!和输出斐波那契数列的函数,并用两个函数进行测试2.12.1deffactorial(n):r=1whilen>1:r*=nn-=1returnrdeffib(n):a,b=1,1whilea<n:print(a,end="")a,b=b,a+bprint('%d!=%d'%(......
  • 洛谷 B3645 数列前缀和 2 题解
    前缀知识:枚举,费马小定理,逆元,线性乘法逆元,线段树(?)。解法1:暴力如题。暴力枚举即可,30分。由于太简单,不给代码。解法2:前缀积+费马小定理+逆元由于涉及静态区间,可以想到前缀积。前缀积公式为\(q_r/q_{l-1}\),除法恰好可以用逆元来算。直接写即可。不会超时,因为时间为\(O(n\logp)\)......