C Fibonacci 系列程序

如何用 C 编程语言使用 While 循环、For 循环、函数和递归编写打印斐波那契数列的程序?斐波那契数列按以下顺序显示:0、1、1、2、3、5、8、13、21、34……

如果您观察上面的 C 斐波那契数列模式,第一个值是 0,第二个值是 1,接下来的数字是前两个数字之和的结果。例如,第三个值是(0 + 1),第四个值是(1 + 1),依此类推。

使用 While 循环的 C 斐波那契数列程序

此程序允许用户输入任何正整数。然后,在此编程中使用 While 循环显示从 0 到用户指定数字的斐波那契数列。

#include <stdio.h>
int main()
{
  int Number, i = 0, Next, First_Value = 0, Second_Value = 1;

  printf("\n Please Enter the Range Number: ");
  scanf("%d",&Number);
  
  while(i < Number) 
  {
  	if(i <= 1)
  	{
  		Next = i;
	}
	else
	{
		Next = First_Value + Second_Value;
		First_Value = Second_Value;
		Second_Value = Next;
	}
    printf("%d \t", Next);
   	i++;  
  }
  return 0;
}
C Fibonacci Series Program using while loop

在此程序中,我们首先声明了四个整型变量 Number、i、First_Value、Second_Value,并赋予了如上所示的值。然后,第一个 printf 和 scanf 语句要求用户输入任何正整数,并将其赋值给 Number 变量。

此 C 斐波那契数列程序中的 While 循环将确保循环从 0 开始,该值小于用户指定的数字。在 While 循环中,我们使用了 If Else 语句。

  • 如果 i 的值小于或等于 1,则将 i 的值赋给 Next。
  • 如果 i 的值大于 1,则在 Else 块内执行计算。

让我们逐次迭代地看看这个 while 循环的工作原理。从上面的 C 编程截图来看,您可以观察到用户输入的数值是 Number= 5, i = 0, First_Value = 0, Second_Value = 1

第一次迭代

While (0 < 5) 中的条件返回 TRUE。因此,斐波那契数列程序将开始执行 while 循环内的语句。

我们在 while 循环中使用了 If Else 语句,并且 if (0 <= 1) 条件返回 TRUE。因此,Next = 0,编译器将退出 if 语句块。

Print 语句 printf(“%d”, Next) 将打印 0。

最后,i 将增加到 1。请参考“递增和递减运算符”文章以了解 ++ 符号。

C 斐波那契数列程序第二次迭代

  • 条件 While (1 < 5) 返回 TRUE
  • If 条件 if (1 <= 1) 返回 TRUE。因此,Next = 1,编译器将退出 if 语句块
  • printf(“%d”, Next) 将打印值 1
  • 最后,i 将增加到 1

第三次迭代

  • While (2 < 5) 返回 TRUE
  • if (2 <= 1) 返回 FALSE。因此,else 块内的语句将开始执行
    • Next = First_Value + Second_Value ==> 0 + 1 = 1
    • First_Value = Second_Value = 1
    • Second_Value = Next = 1
  • 接下来,Print 语句 printf(“%d”, Next) 将打印值 1。
  • i = 3

斐波那契数列程序第四次迭代

  • While (3 < 5) 返回 TRUE
  • if (3 <= 1) 返回 FALSE。因此,编译器执行 else 块
    • Next = First_Value + Second_Value ==> 1 + 1 = 2
    • First_Value 和 Second_Value = 1
    • Second_Value = Next = 2 
  • 它打印 2。接下来,i 将为 4

第五次迭代:while(4 < 5) = True

  • If 条件 if (4 <= 1) 返回 FALSE
    • Next = 1 + 2 => 3
    • First_Value = Second_Value = 2
    • Second_Value = Next = 3 
  • i 变为 5

第六次迭代:While (5 < 5) 返回 FALSE。因此,编译器退出 while 循环。

从上面的结果来看,我们程序的最终输出 Next 值是:0 1 1 2 3

使用 For 循环的 C 斐波那契数列程序

此程序允许用户输入任何正整数。然后,此程序将使用 For 循环打印从 0 到 n 的斐波那契数列。

#include <stdio.h>
int main()
{
	int Number, Next, i, First_Value = 0, Second_Value = 1;
	
	printf("\n Please Enter the Range Number: ");
	scanf("%d",&Number);
	
	/* Find & Displaying */
	for(i = 0; i <= Number; i++) 
	{
		if(i <= 1)
		{
			Next = i;
	    }
		else
		{
			Next = First_Value + Second_Value;
			First_Value = Second_Value;
			Second_Value = Next;
		}
		printf("%d \t", Next);
	}
	return 0;
}

我们只是用 For 循环替换了上面的示例中的 While 循环。请参阅“C 编程中的 For 循环”文章。

使用函数打印斐波那契数列的 C 程序

此程序使用函数打印从 0 到 100 的斐波那契数列。当编译器遇到 FibSes(Number); 行时,编译器将立即跳转到下面的 void FibSes 函数。

#include<stdio.h>
void Fibses(int n) ;
int main()
{
   int n;
 
   printf("Enter the total terms\n");
   scanf("%d", &n);
 
   printf("First %d :\n", n);
   Fibses(n) ;
 
   return 0;
}
void Fibses(int n) 
{
   int i, First_Value = 0, Second_Value = 1, Next;
   for(i = 0; i <=n; i++) 
   {
	if(i <= 1)
	{
	   Next = i;
        }
	else
	{
	   Next = First_Value + Second_Value;
	   First_Value = Second_Value;
	   Second_Value = Next;
	}
	printf("%d\t", Next);
   }
}

使用递归打印斐波那契数列的 C 程序

下面的程序使用递归打印从 0 到用户指定值的斐波那契数列。

#include<stdio.h>
 
int FibSeries(int);
 
int main()
{
   int Num, i = 0, j;
 
   printf("\n Please Enter upto which you want too print: ");
   scanf("%d", &Num);
 
   printf("Fib series\n");
 
   for ( j = 0 ; j <= Num ; j++ )
   {
      printf("%d\t", FibSeries(j));
   }
    return 0;
}
 
int FibSeries(int Num)
{
   if ( Num == 0 )
      return 0;
   else if ( Num == 1 )
      return 1;
   else
      return ( FibSeries(Num - 1) + FibSeries(Num - 2) );
}
Program to Print Fibonacci Series of Numbers using Recursion

递归类分析

以下函数将接受一个整数作为参数值并返回一个整数。

int FibSeries(int Num)

让我们看看上面指定的递归函数内的 Else If 语句

  • if (Num == 0) 检查给定数字是否为 0。当它为 TRUE 时,函数将返回零。
  • if (Num == 1) 检查数字是否等于 1。如果为 TRUE,则函数返回一。
  • 如果大于 1,则编译器执行 else 块中的语句。

在此使用递归的斐波那契系列程序中,在 Else 块内,我们递归调用 FibSeries 函数来显示数字。

return ( FibSeries(Num - 1) + FibSeries(Num - 2) );

例如,Num = 2

(FibSeries(Num – 2) + FibSeries(Num – 1))

(FibSeries(2 – 2) + FibSeries(2 – 1)),这意味着

(FibSeries (0)+ FibSeries(1))

return (0 + 1) = return 1

注意:对于递归函数,在使用函数递归调用之前放置条件是至关重要的。否则,此程序将导致无限递归执行(与无限循环相同)。