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

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

这么直接的问fibonacci,显然是迭代计算。递归的问题在于重复计算,而迭代则避免了这一点:递归是自顶向下,会重复产生子问题;而迭代是自底向上,一步一个脚印,没有重复的子问题。

class Solution {
public:
    int Fibonacci(int n) {
        if(n<=1) return n;
        int a = 0; // f(0)
        int b = 1; // f(1)
        for(int i=2; i<=n; i++){
            b = a + b;
            a = b - a;
        }
        return b;
    }
};
时间: 2025-01-30 11:19:26

《剑指offer》-斐波那契数列的相关文章

[剑指Offer]11.斐波那契数列

题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.斐波那契数列的定义如下: 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n<=70). 输出: 对应每个测试案例, 输出第n项斐波那契数列的值. 样例输入: 3 样例输出: 2 /********************************* * 日期:2013-11-15 * 作者:SJF0115 * 题号: 题目1387:斐波那契数列 * 来源:http://ac

剑指offer系列之七:斐波那契数列

题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. 这题比较简单,直接AC代码如下: package com.rhwayfun.offer; public class Fibonacci { public int getN(int n){ if(n == 0){ return 0; }else if(n == 1){ return 1; } int one = 1; int two = 0; int sum = 0; for (int i = 2; i <=

编程之美之斐波那契数列

[背景] [思路1-递归] int Fibonacci(int n){ if(n <= 2){ return n; } return Fibonacci(n - 1) + Fibonacci(n - 2); } 进一步优化: 当n增大到一定数值,Fibonacci数列值会溢出,并且花费时间很长. long long Fibonacci(int n){ if(n <= 2){ return n; } return Fibonacci(n - 1) + Fibonacci(n - 2); } [思

输出斐波那契数列的算法

斐波那契数列(Fibonacci polynomial),又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.-- 要求编程输出这样的一组数,比如输出10个数的序列 /** * @param i 第n个数 * @param j 第n+1个数 * @param n 输出个数 */ public static void ff( int i,int j,int n){ int m=1; System.out.print(i+","); while(m++<n)

打印菱形以及斐波纳契数列的几种解法介绍

1.编写程序,打印*菱形推出第i行要打印的空白个数及*号个数,用for循环依次打印各行 复制代码 代码如下: #include<stdio.h> //总共要打印2*n-1行,逐行打印 void print1(int n) { int i,j; for(i=1;i<=n;i++){//打印1至n行 for(j=1;j<=n-i;j++)//打印n-i个空格 printf(" "); for(j=1;j<=2*i-1;j++)//打印2*i-1个*号 prin

斐波那契数列-有一对兔子

/************************************************************************************************  题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,*  小兔子长到第三后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? *  1.程序分析: 兔子(对)的规律为数列1,1,2,3,5,8,13,21....* @param args* [斐波那契数列]*********

《BI那点儿事》Microsoft 时序算法——验证神奇的斐波那契数列

原文:<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年,籍贯是比萨.他被人称作"比萨的列昂纳

Raptor实践参考:斐波那契数列

返回->课程主页 2-7 斐波那契数列 输入整数n,输出斐波那契数列中的前n个数.斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233--这个数列前两项均为1,从第3项开始,每一项都等于前两项之和. [参考解答]

C++输出斐波那契数列的两种实现方法_C 语言

定义: 斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...这个数列从第三项开始,每一项都等于前两项之和. 以输出斐波那契数列的前20项为例: 方法一:比较标准的做法,是借助第三个变量实现的. 复制代码 代码如下: #include<iostream>  using namespace std;int main(){    int f1=0,f2=1,t,n=1;    cout<<"数列第1个