每天一道剑指offer-牛客网斐波那契数列

  • 2019 年 10 月 4 日
  • 笔记

题目详述

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

题目详解

思路

  • f(n) = f(n-1) + f(n-2),第一眼看就是递归啊,简直完美的递归环境,递归肯定很爽,这样想着关键代码两三行就搞定了,注意这题的n是从0开始的: if(n<=1) return n; else return Fibonacci(n-1)+Fibonacci(n-2); 然而并没有什么用,测试用例里肯定准备着一个超大的n来让Stack Overflow,递归本质是利用栈,栈深度太深就会溢出;
  • 非递归的方法,就是剑指offer思路,每次使用两个变量a,b来计算下一个数的值sum,然后a,b,sum分别是斐波那契数列中的三个数,那么就令a=b,b=sum,这样a和b就往下移动了一个位置,再计算sum就是滴4个数了,重复这个过程即可。

代码

public class Solution {      public int Fibonacci(int n) {          int a = ;          int b = ;          if(n == )              return ;          if(n == )              return ;          int i = ;          int sum=;          while(i <= n)          {              sum = a + b;              a = b;              b = sum;              i++;          }          return sum;      }  }  

代码讲解

  • 3-8行就是初始值n的个数为0或者1,直接返回当前结果
  • 11-17行就是计算斐波那契数列的下一个数,其中i用来统计计算出了几个数,循环终止条件。