回 帖 发 新 帖 刷新版面

主题:Fibonacci数列(胡宁静)

Fibonacci数列{0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...},可以如下定义:
F0=0
F1=1
Fi=F(i-1)+F(i-2) 对于所有的i大于2
写个程序计算Fibonacci数

 


输入描述:
第一行为需要测试个数T,接着的1行,输入T个数据,每一个数据包含一个数n(0<=n<=45 ),即你需要计算的F(n)
 


输出描述描述:
对每输入的数n,输出对应的F(n),每个F(n)之间包含一个空格,最后一行输出不含回车。
 


样式输入:
5
0 3 5 9 20
 


样式输出:
0 2 5 34 6765
 

#include<stdio.h>
#define N 20
void kkk(int F[], int n)
{
    int i;
    for(i=2;i<n;i++)
    {
        F[i]=F[i-1]+F[i-2];
    }

}

int main()
{
    int F[100]={0,1},b[45];
    int j,k;
    scanf("%d",&k);
    for(j=0;j<k;j++)
    {
         scanf("%d",&b[j]);
    }
    kkk(F,N);
    for(j=0;j<k;j++)
    {
        printf("%d ",F[b[j]]);
    }
    return 0;
}
        



求解,拜托了!!!
 


回复列表 (共3个回复)

沙发

#include <stdio.h>
#define MAX 45
int main()
{
    int N;//number to be input
    int i = 0;//
    int input[MAX]={0};
    //int output[MAX]={0};
    printf("How many numbers do you gonna to input?");
    scanf("%d",&N);
    printf("Input numbers\n");
    while((N > i) && (scanf("%d",&input[i]))){//store input number in a array
        i++;
    }
    int j;
    for(j = 0; j < N; j++){
        printf("%d ",cal_fbionacci(input[j]));
    }
    printf("\nDone!\n");
    return 0;
}

int cal_fbionacci(int n)
{
    if( n <= 2 ){
        if(n == 0)
            return 0;
        else
            return 1;
    }
    else
        return cal_fbionacci(n-1) + cal_fbionacci(n-2);
}

板凳


楼上的大哥,我运行了一下你的,错误啊,
我先出来字啊面的,你可以看一下
#include<stdio.h>
#define N 50
int main()
{
 int i,a[100],b[100]={1,1},j,n;
 scanf("%d",&n);
 for(i=0;i<n;i++)
 {
  scanf("%d",&a[i]);
 }
 for(i=2;i<N;i++)
 {
  b[i]=b[i-1]+b[i-2];
  
  
 }
 for(j=0;j<n-1;j++)
 { 
  if(a[j]==0)
   printf("0 ");
  else
   
   printf("%d ",b[a[j]-1]);
 }
 printf("%d",b[a[n-1]-1]);
 return 0;
}

3 楼

1. Recursive version(Running time is exponential, bad!!)
 
 int FibRec(int number)
 { 
     if( number < 2) //base case.
          return number;
     if( number == 2)
          return 1; 

     return FibRec(number - 1) + FibRec(number -2) 
 }

2. Iterative version(Running time is O(N), better)


int FibIterative(int number)
{
    if( number < 2)
        return number; 

     int a = 0;
     int b = 1; 
     int result = a + b;
     for(int i = 2; i < number; i++)
     { 
          a = b; 
          b = result;
          result = a + b;
     }
     return result;

}

我来回复

您尚未登录,请登录后再回复。点此登录或注册