剑指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 == 0 ? 0 : b;
12     }
13 };
14
15 class Solution02 {
16 public:
17     int Fibonacci(int n) {
18         if (n <= 1)
19             return n;
20         return Fibonacci(n - 1) + Fibonacci(n - 2);
21     }
22 };
23
24 class Solution03 {
25 public:
26     int Fibonacci(int n) {
27         if (n <= 1)
28             return n;
29         vector<int>dp(n + 1);
30         dp[0] = 0, dp[1] = 1;
31         for (int i = 2; i <= n; ++i)
32             dp[i] = dp[i - 1] + dp[i - 2];
33         return dp[n];
34     }
35 };

原文地址:https://www.cnblogs.com/zzw1024/p/11652499.html

时间: 2024-10-31 17:19:24

剑指offer——08斐波那契数列的相关文章

【剑指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之斐波那契数列

题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.斐波那契数列的定义如下: 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n<=70). 输出: 对应每个测试案例, 输出第n项斐波那契数列的值. 样例输入: 3 样例输出: 2 注意:这道题目用递归的话会做大量的重复计算,效率很低.Code: #include <iostream> using namespace std; long long Fibonacc

【剑指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】斐波那契数列非递归求解第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 =