如何用 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;
}

在此程序中,我们首先声明了四个整型变量 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) );
}

递归类分析
以下函数将接受一个整数作为参数值并返回一个整数。
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
注意:对于递归函数,在使用函数递归调用之前放置条件是至关重要的。否则,此程序将导致无限递归执行(与无限循环相同)。