[LeetCode-0509题-斐波那契数列] | 刷题打卡

148 阅读1分钟

掘金团队号上线,助你 Offer 临门! 点击 查看详情

一、题目描述

   斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。
   该数列由 01 开始,后面的每一项数字都是前面两项数字的和。也就是:
   
   F(0) = 0F(1) = 1
   F(n) = F(n - 1) + F(n - 2),其中 n > 1
   
eg1:
输入:2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1

eg2:
输入:3
输出:2
解释:F(3) = F(2) + F(1) = 1 + 1 = 2

eg3:
输入:4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3

二、思路分析

斐波那契数列,又称为兔子数列。
例如: 1, 1, 2, 3, 5, 8, 13, 21

三、解题代码

  1. 解法一:
var fib = function(n) {
    if (n <= 2) return 1
    return fib(n - 1) + fib(n - 2)
};
解法一存在的问题:会存在大量的重复计算,以及计算产生的堆栈数据过多

2. 解法二:


var fib = function(n, prev = 1, next = 1) {
    if (n === 0) return 0
    if (n <= 1) return prev
    return fib(n - 1, next, prev + next)
};

解法二通过尾调用的方法只需要保存内层函数调用记录,大大节省了内存

四、总结

  • 递归容易产生大量的调用栈记录,导致堆栈溢出。
  • 每天一练,持续学习