C:Fibonacci序列中的第一个真实程序

时间:2013-09-17 18:43:45

标签: c fibonacci

我正在尝试编写Fibonacci序列的前10个术语。我觉得自己处于正确的位置,但我似乎无法完全掌握实际的代码(在C中)。

float fib = 0;
const float minn = 1;
const float maxn  = 20;
float n = minn;
while (n <= maxn);{
n = n + 1;
printf (" %4,2f", fib);
fib = (n - 1) + (n - 2);
}

6 个答案:

答案 0 :(得分:0)

对于斐波纳契序列,值f(n)= f(n-1)+ f(n = 2)。前三个值定义为0,1,1。

斐波纳契序列是整数值序列(数学整数,不一定是C语言值)。考虑使用int或long来表示斐波那契值。浮动是没有价值的,只会增加不必要的开销。

计算斐波纳契数列时,必须存储前两个值才能得到下一个值。

你想要10个斐波那契值。你知道前三个已打印出来然后计算接下来的七个值。

7个值意味着循环迭代7次。它与返回的斐波那契值的最大值无关,只与您要打印的值有多少关系。

做这样的事情:

printf("0, 1, 1");

int currentValue;
int valueN1 = 1;
int valueN2 = 1;

for (int counter = 1; counter <= 7; ++counter)
{
    currentValue = valueN1 + valueN2;
    printf(", %d", currentValue);

    valueN2 = valueN1;
    valueN1 = currentValue;
}

答案 1 :(得分:0)

您只需要运行10次循环,找到Fibonacci序列的前10个项。

在你的代码中,while循环不会让你因为循环结束时的分号而走得更远

//declare fib value as long int or unsigned int  
// because the value of any fib  term  is   not at all 
long int fib;
int n=1; 
while (n <= 10)
{
printf (" %d", fib);
fib = fib_term(n); 
n = n + 1;
}

implement fib_term(int n); by seeing this snippet

答案 2 :(得分:0)

首先,我建议将数据类型从float更改为整数或其他数据类型。浮点数不是确切的数字,如果你使用while(n = maxn)而不是while(n <= maxn),你可能最终得到一个无限的loap,因为这两个浮点数永远不会匹配。

其次,您似乎并不真正了解斐波纳契序列是什么。看看wikipedie文章http://en.wikipedia.org/wiki/Fibonacci_number

fibinocci数字不是(n - 1)+(n - 2)就像你一样。它是序列中前两个数字的总和。您需要重新构造循环以保存最后两个值,并根据这些值计算下一个值。

答案 3 :(得分:0)

在C中有(至少)两种方法来实现Fibonacci算法:

迭代:

int fib(int n){   
    if (n == 0)
       return 0; 
    int a = 1   
    int b = 1;   
    for (int i = 3; i <= n; i++) {     
        int c = a + b;     
        a = b;     
        b = c;   
    }   
    return b; 
}

递归:

unsigned int fibonacci_recursive(unsigned int n)
{
if (n == 0) 
{
    return 0;
} 
if (n == 1) {
       return 1;
}
return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2);
}

void main(){
    unsigned int i = fibonacci_recursive(10);
}

答案 4 :(得分:0)

建议

  1. 在执行整数问题时,请考虑FP类型之前的整数类型。

  2. ;

  3. 中省略while (n <= maxn);{
  4. 以浮点格式.代替%4.2f使用%4,2f

  5. Fibonacci是前两个术语的总和,而不仅仅是fib = (n - 1) + (n - 2)

  6. 考虑unsigned解决方案:

  7. C代码:

    void Fibonacci_Sequence(unsigned n) {
      const unsigned minn = 1;
      const unsigned maxn = 20;
      unsigned F[3];
      F[0] = 0;
      F[1] = 1;
      unsigned i = 0;
      for (i = 0; i <= maxn; i++) {
        if (i >= minn) printf(" %u,", F[0]);
        F[2] = F[1] + F[0];
        F[0] = F[1]; 
        F[1] = F[2]; 
      }
    }  
    

答案 5 :(得分:0)

这使用n / 2次迭代

#include<stdio.h>
main()
{
                 int i,n,a=0,b=1,odd;
                 scanf("%d",&n);
                 odd=n%2;
                 for(i=1;i<=n/2;i++)
                 {
                                  printf("%d %d ",a,b);
                                  a=a+b;
                                  b=a+b;
                 }
                 if(odd)
                 printf("%d",a);
}