D7.1 递归和非递归分别实现求第n个斐波那契数。

         斐波那契数,亦称之为斐波那契数列, 又称黄金分割数列、费波那西数列、费波拿契数、费氏数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。

递归实现:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h.>

int fib(int n){
    if (n <= 2){
        return 1;
    }
    else
        return fib(n - 1) + fib(n - 2);
}
int main(){
    int num;
    printf("请输入一个数:");
    scanf("%d", &num);
    int q=fib(num);
    printf("%d\n", q);
    system("pause");
    return 0;
}

非递归实现:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int fib(int n){
    int next_reuslt;
    int pre_result = 1;
    int result = 1;
    while (n > 2){
        n -= 1;
        next_reuslt = pre_result;
        pre_result = result;
        result = next_reuslt + pre_result;
    }
    return result;
}
int main(){
    int f,n=0;
    printf("求第几个斐波那契数:");
    scanf("%d", &n);
    f = fib(n);
    printf("%d", f);
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/canvasa/article/details/89025320