斐波那契递归与非递归

//递归:

#include
#include
#include
#include
using namespace std;
typedef long long LL;
int n;

LL fibo(int n)
{
    if(n == 2 || n == 1) return 1;
    return fibo(n - 1) + fibo(n - 2);
}

int main()
{
    cin >> n;
    cout << fibo(n);
    return 0;
}

//非递归:

#include
#include
#include
#include
using namespace std;
typedef long long LL;
int n;

LL fibo(int n)
{
    if(n == 1 || n == 2) return 1;
    LL f1 = 1, f2 = 1, f3 = 0;
    for(int i = 3; i <= n; i ++)
    {
        f3 = f1 + f2;
        f1 = f2;
        f2 = f3;
    }
    return f3;
}

int main()
{
    cin >> n;
    cout << fibo(n);
    return 0;
}

要通过递归实现斐波那契数列首先要明确递归关系和边界条件,之后再设计函数就行。

对于斐波那契数列的递归条件是当n>2时,fibo(n)=fibo(n-1)+fibo(n-2);边界条件是当n为2或者1时,斐波那契的值为1。

用非递归实现斐波那契数列,因为要进行数据的移动,所以需引进一个新的变量(f3)来完成数据的暂存,之后在for循环中通过 f3 = f1 + f2;f1 = f2;f2 = f3;这三步操作就可以按需实现结果。

你可能感兴趣的:(c++)