P1-2017级算法第一次上机 A 水水的斐波那契数列

题目描述

相信大家都学过斐波那契数列,虽然很简单,但是斐波那契数列却是很重要的哦,那么让我们来复习一下斐波那契数列吧!

输入

多组数据输入

每行一个整数n (0<n<=30)

输出

对于每组数据,输出一行,为斐波那契数列第n 项的值

输入样例

1

2

3

4

输出样例

1

1

2

3

思路

用一个一维数组f(n)来表示斐波那契数列第n项的值。

则根据定义,后一项等于前两项之和,很容易得到:f(n) = f(n-1) + f(n-2)。

有两种做法,递归和循环。

虽然很多人都说递归好理解,但是作为一个递归是同学教的、基础完全没打扎实的人来说,能用循环就不会用递归。

直接上代码吧,没啥好说的。

 1 //循环
 2 #include<stdio.h>
 3 int main()
 4 {
 5     int n;
 6     int f[31];
 7     int i;
 8     f[1] = 1;f[2] = 1;
 9     for(i = 3;i <= 30;i++){
10         f[i] = f[i-1] + f[i-2];
11     }
12     while(scanf("%d",&n) != EOF){
13         printf("%d\n",f[n]);
14     }
15 }  
 1 //递归
 2 #include<stdio.h>
 3 int main()
 4 {
 5     int n;
 6     while(scanf("%d",&n) != EOF){
 7         printf("%d\n",feibonacci(n));
 8     }
 9 }
10
11 int feibonacci(int n)
12 {
13     if(n == 1 || n == 2)
14         return 1;
15     else
16         return feibonacci(n-1) + feibonacci(n-2);
17 }  

原文地址:https://www.cnblogs.com/zjsyzmx0527/p/10161119.html

时间: 2024-09-28 06:52:11

P1-2017级算法第一次上机 A 水水的斐波那契数列的相关文章

经典算法详解(1)斐波那契数列的n项

斐波那契数列是一个常识性的知识,它指的是这样的一个数列,它的第一项是1,第二项是1,后面每一项都是它前面两项的和,如:1,1,2,3,5,8,13,21,34,55,89,144,233-- 说明:由于通过递推方式效率低,系统开销大,空间复杂度高,故不考虑. 1 /*斐波那契数列:第一项和第二项为1,后面各项是其前面两项之和*/ 2 /*编写一个函数,输入整数n,求该项的值*/ 3 4 #include<iostream> 5 6 using namespace std; 7 8 int fi

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

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

剑指offer-第二章算法之斐波拉契数列(青蛙跳台阶)

递归与循环 递归:在一个函数的内部调用这个函数. 本质:把一个问题分解为两个,或者多个小问题(多个小问题相互重叠的部分,会存在重复的计算) 优点:简洁,易于实现. 缺点:时间和空间消耗严重,如果递归调用的层级太多,就会超出栈容量. 循环:通过设置计算的初始值及终止条件,在一个范围内重复运算. 斐波拉契数列 题目一:写一个函数,输入n,求斐波拉契(Fibonacci)数列的第n项,定义如下: 第一种解法:用递归的算法: long long Fabonacci(unsigned int n) { i

算法导论-求(Fibonacci)斐波那契数列算法对比

目录 1.斐波那契数列(Fibonacci)介绍 2.朴素递归算法(Naive recursive algorithm) 3.朴素递归平方算法(Naive recursive squaring) 4 .自底向上算法(Bottom-up) 5. 递归平方算法(Recursive squaring) 6.完整代码(c++) 7.参考资料 内容 1.斐波那契数列(Fibonacci)介绍 Fibonacci数列应该也算是耳熟能详,它的递归定义如上图所示. 下面2-6分别说明求取Fibonacci数列的

java程序员到底该不该了解一点算法(一个简单的递归计算斐波那契数列的案例说明算法对程序的重要性)

为什么说 “算法是程序的灵魂这句话一点也不为过”,请看下面这个简单的案例 1 package recursion; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 import org.junit.Test; 7 8 /** 9 * @author: MengXianman 10 * @creationTime: 2017年11月27日 上午9:47:51 11 * @description: 斐波那契数列结合备忘录算法的简单使

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)一书.他是第一个研究了

斐波那契数列公式算法-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

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

斐波那契数列,又称黄金分割数列,指的是这样一个数列: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年代起出版了<斐波纳契数列>季刊,专门刊载这方面的研究成果. 以上内容来自百度百科.. 今天主要是想用动态规划的思想求解斐波那契数列,用来观察动态规划带来的优势,空间换时间,不重复求解