剑指offer之斐波那契数列

简介: 剑指offer之斐波那契数列

1 问题

写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列定义如下。

f(n) = 0; (n = 0)
f(n) = 1; (n = 1)
f(n) = f(n - 1) + f(n - 2); (n >= 2);


2 分析

1) 直接用递归

2) 我们用两个变量保持每次需要计算下一个值得前面2个数,从最前面开始迭代。


3 代码实现

#include <stdio.h>
long long fibonacciOne(unsigned int n)
{
    if (n <= 0)
        return 0;
    if (n == 1)
        return 1;
    return fibonacciOne(n - 1) + fibonacciOne(n - 2);
}
long long fibonacciTwo(unsigned int n)
{
    if (n <= 0)
        return 0;
    if (n == 1)
        return 1;
    long long first = 0;
    long long second = 1;
    long long sum = 0;
    for (int  i = 2; i <= n ; ++i)
    {
        sum = first + second;
        first = second;
        second = sum;
    }
    return sum;
}
int main(void) 
{
    long long resultOne = fibonacciOne(8);
    long long resultTwo = fibonacciTwo(8);
    printf("resultOne is %lld\n", resultOne);
    printf("resultTwo is %lld\n", resultTwo);
    return 0;
}


4 运行结果

resultOne is 21
resultTwo is 21

相关文章
LeedCode_04-斐波那契数列(剑指offer-10)
LeedCode_04-斐波那契数列(剑指offer-10)
【剑指offer】-斐波那契数列-07/67
【剑指offer】-斐波那契数列-07/67
|
8月前
剑指Offer LeetCode 面试题10- I. 斐波那契数列
剑指Offer LeetCode 面试题10- I. 斐波那契数列
46 0
剑指offer-9.斐波那契数列
剑指offer-9.斐波那契数列
56 1
剑指offer 09. 斐波那契数列
剑指offer 09. 斐波那契数列
46 0
|
存储
剑指Offer - 面试题10:斐波那契数列
剑指Offer - 面试题10:斐波那契数列
94 0
|
算法
斐波那契数列两种算法和青蛙跳台阶的两种实际问题
当我们看到这样的题时,心想就是一个简单的递归调用么。 但是,我们要看到这种算法的不足之处——效率低下。 首先简单的介绍一下 :
102 0
斐波那契数列(剑指offer 10-I)
斐波那契数列(剑指offer 10-I)
|
开发者 Python
求斐波那契数列数列 | 学习笔记
快速学习 求斐波那契数列数列
108 0
求斐波那契数列数列 | 学习笔记
|
机器学习/深度学习 算法
数据结构与算法—递归算法(从阶乘、斐波那契到汉诺塔的递归图解)
递归:就是函数自己调用自己。 子问题须与原始问题为同样的事,或者更为简单; 递归通常可以简单的处理子问题,但是不一定是最好的。
144 0