C语言----斐波那契数的n种实现方法

斐波那契数列(Fibonacci):第1,2两个数为1,1。从第三个数开始,该数是其前面两个数之和。

1.使用简单代码实现

(1)每次循环只输出后一位数

思想:前两个数为1,1。先定义前两个变量a,b。第三个数为前两两个数之和,定义第三个变量c,c=a+b;现在有三个数,为了避免冗余,把第二个数的值赋给a,第三个数的值赋给b,c=a+b得到第四个数,以此类推…

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
 int n = 0;
 int a = 1;
 int b = 1;
 int c = 0;
 int i = 0;
 scanf("%d", &n);
 printf("%5d %5d ", a, b);
 for (i = 0; i < n - 2;i++)
 {
   c = a + b;
   a = b;
   b = c;
   printf("%5d ", c);
 }
 printf("\n");
 system("pause");
 return 0;
}

运行结果如图:
在这里插入图片描述
(2)每次循环输出后两位数,提高效率

思想:只定义前两个变量a,b。把a+b的结果不放在其他变量中,放在a中(a=a+b),取代原 a中的值,此时a中为第三个数的值,继续执行,b=b+a,此时b为第四位数,以此类推…

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
 int n = 0;
 int a = 1;
 int b = 1;
 int i = 0;
 scanf("%d", &n);
 for (i = 0; i < n; i++)
 {
  printf("%5d %5d ", a, b);
  a = a + b;
  b = b + a;
 }
 system("pause");
 return 0;
}

运行结果如图:
在这里插入图片描述
2.使用数组方法实现

思想:上述方法只能顺序计算并输出各数,但不能在内存中保存。如果想 直接输出某个数,是比较困难的,此时可以利用数组解决。每一个数组元素代表数列中的一个元素,依次求出各数并放在相应的数组元素中即可。

//用数组时此处必须给定数组大小(20)
#include <stdio.h>
#include <stdlib.h>
int main()
{
 int arr[20] = { 1, 1 };
 int i = 0;
 for (i = 2; i < 20; i++)
 {
  arr[i] = arr[i - 1] + arr[i - 2];
 }
 for (i = 0; i < 20; i++)
 {
  printf("%10d ", arr[i]);
 }
 system("pause");
 return 0;
}

运行结果如图:
在这里插入图片描述
3.使用函数方法实现

思想:思想和简单代码类似,只是使用了函数的调用

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int fib(int n)
{
 int a = 1;
 int b = 1;
 int c = 1;
 int i = 0;
 for (i = 0; i < n - 2; i++)
 {
  c = a + b;
  a = b;
  b = c;
 }
 return c;
}
int main()
{
 int n = 0;
 int ret = 0;
 scanf("%d", &n);
 ret = fib(n);
 printf("%d\n", ret);
 system("pause");
 return 0;
}

运行结果如图:
在这里插入图片描述
4.使用函数方法实现

//用递归方法实现输出第n个斐波那契数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int fib(int n)
{
 if (n <= 2)
 {
  return 1;
 }
 else
 {
  return fib(n - 1) + fib(n - 2);
 }
}
int main()
{
 int n = 0;
 int ret = 0;
 scanf("%d", &n);
 ret = fib(n);
 printf("%d\n", ret);
 system("pause");
 return 0;
}

运行结果如图:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值