斐波那契数列的递归、迭代、公式法

来源:互联网 发布:codecache javascript 编辑:程序博客网 时间:2024/05/22 04:15

写完了递推法之后,尝试了下迭代和公式,中间遇到了一个问题,当我输入的数据越过10了之后,迭代和公式法出现了负数。仔细看了下代码发现定义数组的时候习惯性的用了char,而字符串数组的范围是127~-128,所以才会出现负数这个东西。C语言没好好学啊,难受。

#include<math.h>#include<stdio.h>//递归法求斐波那契数列int fun(int n){    if(n>1){        return fun(n-1)+fun(n-2);    }else{       return n;    }}//迭代法求斐波那契数列int fun2(int n){    int i,a[100];    a[0]=0;    a[1]=1;    for(i=2;i<=n;i++){        a[i]=a[i-1]+a[i-2];    }    return a[n];}//公式法求斐波那契数列int fun3(int n){    int i,a[100];     double gh5=sqrt((double)5);     a[0]=0;a[1]=1;a[2]=1;     for(i=2;i<=n;i++){        a[i]=(pow((1+gh5),n)/(pow(2,n)*gh5))+0.5;     }     return a[n];}int main(){    int a,i;    printf("请输入要求多少项斐波那契数列:");    scanf("%d",&a);    printf("递归法%:");    for(i=0;i<=a;i++){    printf("%d ",fun(i));    }    printf("\n");    printf("迭代法%:");    for(i=0;i<=a;i++){    printf("%d ",fun2(i));    }    printf("\n");    printf("公式法%:");    for(i=0;i<=a;i++){    printf("%d ",fun3(i));    }    return 0;}


阅读全文
0 0