剑指OFFER之斐波那契数列

题目描述:

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

输入:

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

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

输出:

对应每个测试案例,

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

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

注意:这道题目用递归的话会做大量的重复计算,效率很低。Code:
#include <iostream>

using namespace std;

long long Fibonacci(int n){
    if(n==0){
        return 0;
    }
    if(n==1){
        return 1;
    }
    long long preNum=0;
    long long curNum=1;
    long long ansNum;
    for(int i=2;i<=n;++i){
        ansNum=preNum+curNum;
        preNum=curNum;
        curNum=ansNum;
    }
    return ansNum;
}

int main()
{
    int n;
    while(cin>>n){
        cout<<Fibonacci(n)<<endl;
    }
    return 0;
}

/**************************************************************
    Problem: 1387
    User: lcyvino
    Language: C++
    Result: Accepted
    Time:10 ms
    Memory:1520 kb
****************************************************************/
 
时间: 2024-10-07 08:14:33

剑指OFFER之斐波那契数列的相关文章

【剑指offer】斐波那契数列

题目1描述: 写一个函数,输入n,求斐波那契数列的第n项.斐波那契数列的定义如下: f(n) = 0 (n = 0);  f(n) = 1 (n = 1);  f(n) = f(n-1)+f(n-2) (n > 1); 分析描述: 在大多数的C语言教科书中,一般会用递归求斐波那契数列.代码如下: long long Fibonacci(unsigned int n) { if(n <= 0) return 0; if(n <= 1) return 1; return Fibonacci(

【剑指offer】斐波那契数列(递归和非递归实现)

递归实现是最常想到的方法,代码如下: //递归方式 long Fibonacci(unsigned n) { if (n==0) { return 0; } else if (n==1) { return 1; } else { return Fibonacci(n-1)+Fibonacci(n-2); } } 显然递归并不是最好的方法,当n较大时效率将非常低下. 较好的思路是: 从下往上计算,首先根据f(0)和f(1)算出f(2),再根据f(1)和f(2)算出f(3)--依此类推就可以算出第n

《剑指offer》------斐波拉契数列

题目一:求斐波拉契数列的第n项. 写出一个函数,输入n,求斐波拉契(Fibonacci)数列的第n项.斐波拉契数列定义如下: C++实现: //斐波拉契数列 #include <iostream> using namespace std; //递归实现 long long Fibonacci1(unsigned int n){ if(n<=1){ return n; } return Fibonacci1(n-1)+Fibonacci1(n-2); } //非递归实现 long long

《剑指offer》---斐波那契数列

本文算法使用python3实现 1.题目描述: ??大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.n<=39 ??时间限制:1s:空间限制:32768K 2.思路描述: ??实现斐波那契额数列主要有两种方法: ??(1)递归法:自顶向下进行,当递归较深时,时间复杂度是很高的. ??(2)迭代法:自底向上进行,从第0项开始计算,并将结果保存起来,最后返回第n项即可.该方法时间复杂度较低,但需要额外空间,相对于递归来说,是一种空间换时间的方法. ??接下来我们将分别对

剑指offer 07斐波那契数列

现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 java版本: public class Solution { public static void main(String[] args) { long startTime=System.currentTimeMillis(); System.out.println("第39项是:"+Fibonacci(39)); long endTime = System.currentTimeMill

剑指offer——08斐波那契数列

题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 有多种方法,简单的循环.递归.动态规划: 1 class Solution01 { 2 public: 3 int Fibonacci(int n) { 4 int a = 0, b = 1, c; 5 for (int i = 2; i <= n; ++i) 6 { 7 c = a + b; 8 a = b; 9 b = c; 10 } 11 return n ==

【剑指offer】斐波那契数列非递归求解第N项

public class Solution {    public int Fibonacci(int n) {       //错误输入处理       if(n<0) return -1;       int pre = 1;       int result = 0;       for(int i=0; i<n; i++){           //计算第i项           result += pre;           //将pre往后更新一项           pre =

剑指offer编程题Java实现——面试题9斐波那契数列

题目:写一个函数,输入n,求斐波那契数列的第n项. 1 package Solution; 2 3 /** 4 * 剑指offer面试题9:斐波那契数列 5 * 题目:写一个函数,输入n,求斐波那契数列的第n项. 6 * 0, n=1 7 * 斐波那契数列定义如下:f(n)= 1, n=2 8 * f(n-1)+f(n-2), n>2 9 * @author GL 10 * 11 */ 12 public class No9Fibonacci { 13 14 public static void

剑指offer (9) 递归和迭代 斐波那契数列

通常基于递归实现的代码比基于循环实现的代码要简洁很多 比如 二叉树遍历以及 二叉树的许多操作 递归由于是函数调用自身,每一次函数调用,都需要在内存栈中分配空间以保存参数.返回地址以及临时变量 而每个进程的栈容量是有限的,当递归调用的层级太多时,就会导致 调用栈溢出 递归有时伴随大量重复的计算, 二叉树遍历的递归操作不存在重复计算,因为每个结点的左右子树是严格区分开的 例如求解 斐波那契数列: 解题分析 int fib(int n) { assert(n >= 0); int prevTwo =