斐波那契数列(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;
}
运行结果如图: