刷题9 斐波那契数列及跳台阶问题

斐波那契数列问题描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。  n<=39

关于斐波那契数列, 定义是这样的:

因为递归太浪费空间, 所以采用循环:

 1 class Solution {
 2 public:
 3     int Fibonacci(int n) {
 4         if(n < 2)
 5             return n;
 6         int first = 0;
 7         int second = 1;
 8         int sum = -1;
 9         for(int i = 0; i < n - 1; i++)
10         {
11             sum = first + second;
12             first = second;
13             second = sum;
14         }
15         return sum;
16     }
17 };

这种方法采用了三个变量来参与循环,有强迫症的可以改成两个变量:

 1 class Solution {
 2 public:
 3     int Fibonacci(int n) {
 4         if(n < 2)
 5             return n;
 6         int first = 0;
 7         int second = 1;
 8         for(int i = 0; i < n - 1; i++)
 9         {
10             second += first;
11             first = second - first;
12         }
13         return second;
14     }
15 };

这个跳台阶的问题就是斐波那契数列的应用了,问题描述:  一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

f(1) = 1; f(2) = 2; f(3) = 3; f(4) = 5; f(n) = f(n-1) + f(n-2);

 1 class Solution {
 2 public:
 3     int jumpFloor(int number) {
 4         if(number < 3)
 5             return number;
 6         int first = 1;
 7         int second = 2;
 8         for(int i = 3; i <= number; i++)
 9         {
10             second = first + second;
11             first = second - first;
12         }
13         return second;
14     }
15 };
时间: 2024-10-09 17:01:56

刷题9 斐波那契数列及跳台阶问题的相关文章

07 斐波那契数列 08 跳台阶 两个题的解答相似

官方正规的数学界的斐波那契数列的定义: 波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1.1.2.3.5.8.13.21.34.……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理.准晶体结构.化学等领域,斐波纳契数列都有直接的应用. 是以1

斐波那契数列与跳台阶问题以及变态跳台阶

1.跳台阶问题:(其实就是很纯粹的斐波那契数列问题)比较倾向于找规律的解法,f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5,  可以总结出f(n) = f(n-1) + f(n-2)的规律,但是为什么会出现这样的规律呢?假设现在6个台阶,我们可以从第5跳一步到6,这样的话有多少种方案跳到5就有多少种方案跳到6,另外我们也可以从4跳两步跳到6,跳到4有多少种方案的话,就有多少种方案跳到6,其他的不能从3跳到6什么的啦,所以最后就是f(6) = f(5) + f(4):

剑指offer(10)—— 斐波那契数列以及跳台阶问题

总结 2^(n-1)可以用位移操作进行: 1<< (n-1) 如果递归不好思考的话,可以找规律,代码很简单 斐波那契数列(10) 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 public class Solution { public int Fibonacci(int n) { // 先判断n必须在范围内取值 if(n > 39 && n <= 0) return 0; // 为1直接返

C++基础知识(五)斐波拉契数列、跳台阶问题

#include <iostream> using namespace std; int jumpFloor(int number) { //递归 //if(number<0)return 0; //if(number==0)return 1; //if(number==1)return 1; //else return (jumpFloor(number-1) + jumpFloor(number-2)); //循坏 int way=1; int pre_way=1; if(numbe

斐波那契序列与跳台阶

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25337983 剑指offer上的第就题,简单题,在九度OJ上测试通过. 主要注意以下几点: 1.用非递归实现,递归会超时 2.结果要用long long保存,不然会发生结果的溢出,从而得到负值 3.如果是在VC++6.0下编译的,long long是illegal的,要用_int64代替,同时输出的转化以字符也要用%64d代替%lld 时间限制:1 秒 内存限制:32 兆 题目描述: 大

算法题4 斐波那契数列

题目: Fibonacci数列定义如下: 输入n,求f(n) 分析: 在剑指offer上有个O(logn)的算法,本文只做O(n)算法的分析.这其实是一个简单的动态规划问题,问题的结果跟子问题的结果相关,关系式已经给出了,计算中需要保存子问题的结果 跳台阶问题:一个台阶一共有n阶,一次起跳可以跳一阶,也可以跳二阶.问总共有多少中跳法,并对时间复杂度进行分析.该问题也是典型的Fibonacci数列问题,第一次跳1个台阶,接下来有f(n-1)中跳法,第一次跳2个台阶,则接下来有f(n-2)个跳法.

百度之星题--斐波拉契数列

题目: du熊学斐波那契I Time Limit : 2000/1000ms (C/Other) Memory Limit : 65535/32768K (C/Other) 本次组委会推荐使用C.C++ Problem Description du熊对数学一直都非常感兴趣.最近在学习斐波那契数列的它,向你展示了一个数字串,它称之为"斐波那契"串: 11235813471123581347112358........ 聪明的你当然一眼就看出了这个串是这么构造的:1.先写下两位在0~9范围

Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 E. Excellent Engineers-单点更新、区间最值-线段树 G. Growling Gears I. Interesting Integers-类似斐波那契数列-递推思维题

先写这几道题,比赛的时候有事就只签了个到. E. Excellent Engineers 传送门: 这个题的意思就是如果一个人的r1,r2,r3中的某一个比已存在的人中的小,就把这个人添加到名单中. 因为是3个变量,所以按其中一个变量进行sort排序,然后,剩下的两个变量,一个当位置pos,一个当值val,通过线段树的单点更新和区间最值操作,就可以把名单确定. 代码: 1 //E-线段树 2 #include<iostream> 3 #include<cstdio> 4 #incl

“斐波那契数列”衍生题

一.斐波那契数列 斐波那契数列是这样的一组数列:1.1.2.3.5.8.13.21.34.……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)即大于2的部分是由前两个相加获得. 若要求第 N 个数的值,我们可以用递归也可以通过迭代的方式求解 1.递归 def fibonacci(n): if n == 1 or n == 2: return 1 return fibonacci(n - 1) + fibona