LintCode斐波纳契数列

题目:

查找斐波纳契数列中第 N 个数。
所谓的斐波纳契数列是指:
前2个数是 0 和 1 。
i 个数是第 i-1 个数和第i-2 个数的和。

斐波纳契数列的前10个数字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...

样例
给定1,返回0

给定2,返回1

给定10,返回34

分析

开始刷LintCode的第一道题,也是很基础的一道题。
斐波那契数列经常用来讲解递归的例子。
所以可以用递归的方法很方便的解决

递归

class Solution {
    /**
     * @param n: an integer
     * @return an integer f(n)
     */
    public int fibonacci(int n) {
        // write your code here
        if(n == 1)
        {
            return 0;
        }
        else if(n == 2)
        {
            return 1;
        }
        else
        {
            return fibonacci(n-1) + fibonacci(n-2); 
        }
    }
}

这是用递归的方法解决,很清晰,几乎是照搬了斐波那契数列的递推式
但是递归算法的时间复杂度太高,提交之后并不通过

捕获.PNG

非递归方法

所以需要尝试非递归方法解决这个问题

class Solution {
    /**
     * @param n: an integer
     * @return an integer f(n)
     */
    public int fibonacci(int n) {
        // write your code here
        if(n == 1)
        {
            return 0;
        }
        else if(n == 2)
        {
            return 1;
        }
        else
        {
            int s1 = 0;
            int s2 = 1;
            int sum = 0;
            int i = 3;
            while(i <= n)
            {
                sum = s1 + s2;
                s1 = s2;
                s2 =sum;
                i++;
            }
            return sum;
        }
    }
}

小结

以上就是斐波那契数列问题。
** 故不积跬步,无以至千里;不积小流,无以成江海 **
希望能慢慢坚持下去,从简单到复杂的算法!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 由于简书不支持 Latex ,建议去我的博客看原文:斐波纳契数列实现及优化求关注、求交流、求意见、求建议。 前言 ...
    華方阅读 5,872评论 1 3
  • 查找斐波纳契数列中第 N 个数。所谓的斐波纳契数列是指:前2个数是 0 和 1 。第 i 个数是第 i-1 个数和...
    DayDayUpppppp阅读 1,832评论 0 0
  • 我是小小强,这是我的第4篇原创文章,阅读需要大约10分钟。 题目 LintCode:斐波纳契数列 描述 查找斐波纳...
    我叫小小强阅读 2,695评论 0 0
  • 题目 描述 查找斐波纳契数列中第 N 个数。 所谓的斐波纳契数列是指:前2个数是 0 和 1 。第 i 个数是第 ...
    悠扬前奏阅读 2,622评论 0 1
  • 忙碌还只是刚刚开了个头,忙里偷闲还可以坐下来喝一壶清茶。很庆幸无意中发现了一个好去处。汉正街大陆桥的八楼,喧闹嘈...
    美芽儿阅读 3,034评论 0 0

友情链接更多精彩内容