题目

LintCode题解:LintCode_3793斐波那契数列(C 语言版)_循环代替递归

样例

LintCode题解:LintCode_3793斐波那契数列(C 语言版)_递归_02

LintCode题解:LintCode_3793斐波那契数列(C 语言版)_递归_03

LintCode题解:LintCode_3793斐波那契数列(C 语言版)_循环代替递归_04

题解

#include <stdio.h>

long fibonacci(int n) {
    // Write your code here
    if (1 == n)
        return 1;
    
    if (2 == n)
        return 1;
    
    //a b temp
    long a = 1;
    long b = 1;
    long temp = a + b;
    for (int i = 2; i < n; i++)
    {
        temp = a + b;
        a = b;
        b = temp;
    }

    return temp;
}

int main() {
    int n;
    scanf("%d", &n);
    printf("F(%d) = %ld\n", n, fibonacci(n));
    return 0;
}

难点

此题的难点就是如果递归调用就会出现运行时间过长的情况,导致题目无法通过,故此处采用循环代替递归的方法,来解决此问题。