斐波那契序列与跳台阶

转载请注明出处: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 兆

题目描述:

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。斐波那契数列的定义如下:

输入:

输入可能包含多个测试样例,对于每个测试案例,

输入包括一个整数n(1<=n<=70)。

输出:

对应每个测试案例,

输出第n项斐波那契数列的值。

样例输入:
3
样例输出:
2

AC代码:

#include<stdio.h>

long long Fibonacci(unsigned int n)
{
	if(n <= 0)
		return 0;
	if(n == 1)
		return 1;
	long long fib1 = 0;
	long long fib2 = 1;
	long long FibN = 0;
	unsigned int i;
	for(i=2;i<=n;i++)
	{
		FibN = fib1 + fib2;
		fib1 = fib2;
		fib2 = FibN;
	}
	return FibN;
}

int main()
{
	unsigned int n;
	while(scanf("%d",&n) != EOF)
		printf("%lld\n",Fibonacci(n));
	return 0;
}


/**************************************************************

    Problem: 1387

    User: mmc_maodun

    Language: C

    Result: Accepted

    Time:0 ms

    Memory:912 kb

****************************************************************/

延伸:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

思路:

首先如果只有1个台阶,则只有1种跳法;

如果有2个台阶,则有2种跳法:1-1,2;

如果有3个台阶,则有3种跳法:1-2,2-1,1-1-1;

......

如果现在有n个台阶,我们假设有f(n)种跳法,我们往前看最后一跳的情况,显然之后两种情况:跳1个台阶和跳2个台阶。

如果最后一次跳是跳了1个台阶,则前面n-1个台阶有f(n-1)种跳法,如果最后一跳时跳了2个台阶,则前面n-2个台阶有f(n-2)中跳法。因此,如果n>2,则f(n) = f(n-1) + f(n-2),这便用到了斐波那契序列,只是这里的初始条件是f(1) = 1,f(2) = 2。程序同上面的类似,这里不再给出!

斐波那契序列与跳台阶

时间: 2024-08-08 13:54:47

斐波那契序列与跳台阶的相关文章

刷题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.跳台阶问题:(其实就是很纯粹的斐波那契数列问题)比较倾向于找规律的解法,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):

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

剑指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

最长斐波那契序列-LeetCode-873

英文版A sequence X_1, X_2, ..., X_n is fibonacci-like if: - n >= 3- X_i + X_{i+1} = X_{i+2} for all i + 2 <= n Given a strictly increasing array A of positive integers forming a sequence, find the length of the longest fibonacci-like subsequence of A.

斐波那契序列的求解

设斐波那契序列是f(n),其中 原文地址:https://www.cnblogs.com/gaoyixue/p/10464584.html

[Swift]LeetCode842. 将数组拆分成斐波那契序列 | Split Array into Fibonacci Sequence

Given a string S of digits, such as S = "123456579", we can split it into a Fibonacci-like sequence [123, 456, 579]. Formally, a Fibonacci-like sequence is a list F of non-negative integers such that: 0 <= F[i] <= 2^31 - 1, (that is, each

842. 将数组拆分成斐波那契序列

给定一个数字字符串 S,比如 S = "123456579",我们可以将它分成斐波那契式的序列 [123, 456, 579]. 形式上,斐波那契式序列是一个非负整数列表 F,且满足: 0 <= F[i] <= 2^31 - 1,(也就是说,每个整数都符合 32 位有符号整数类型):F.length >= 3:对于所有的0 <= i < F.length - 2,都有 F[i] + F[i+1] = F[i+2] 成立.另外,请注意,将字符串拆分成小块时,