剑指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

相关文章
|
9月前
|
Java
leetcode-509:斐波那契数
leetcode-509:斐波那契数
492 0
LeedCode_04-斐波那契数列(剑指offer-10)
LeedCode_04-斐波那契数列(剑指offer-10)
【剑指offer】-斐波那契数列-07/67
【剑指offer】-斐波那契数列-07/67
leetcode 509 斐波那契数
今天重新看了下动态规划, 它和递归的区别就是,它是自下而上的。 还了解到状态压缩 如果我们发现每次状态转移只需要 DP table 中的一部分,那么可以尝试用状态压缩来缩小 DP table 的大小,只记录必要的数据 于是就刷了这道简答题,用到了状态压缩
53 0
|
9月前
剑指Offer LeetCode 面试题10- I. 斐波那契数列
剑指Offer LeetCode 面试题10- I. 斐波那契数列
49 0
剑指offer-9.斐波那契数列
剑指offer-9.斐波那契数列
59 1
|
算法 C++
剑指offer(C++)-JZ10:斐波那契数列(时间复杂度O(logn)解法)
剑指offer(C++)-JZ10:斐波那契数列(时间复杂度O(logn)解法)
剑指offer 09. 斐波那契数列
剑指offer 09. 斐波那契数列
53 0
|
存储
剑指Offer - 面试题10:斐波那契数列
剑指Offer - 面试题10:斐波那契数列
97 0
斐波那契数列(剑指offer 10-I)
斐波那契数列(剑指offer 10-I)
113 0