调用函数,求斐波那契数列的第n个元素(采用函数递归)
编程思路:
1、键入要输入的项数;
2、计算该项元素对应的斐波那契数;
2.1、判断n是否是1或2;
2.2、若是1或2,则输出1;
2.3、否则从3开始遍历每一项,根据斐波那契数列的性质,后一项等于前两项的和;
2.4、返回计算的结果;
3、打印结果。
注意:
1、若采用#if 0;则这个函数递归对应的算法采用了循环,使得算法得到了优化,大大提高了程序执行效率;
2、若采用#if 1;则会出现大量的重复计算,导致程序执行效率严重下降;
3、我建议大家采用#if 0;来完成这个问题,程序执行效率高。
具体代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#if 0
int Fib(int n) {
if (n == 1 || n == 2) {
return 1;
}
return Fib(n - 1) + Fib(n - 2);
}
#else
int Fib(int n) {
int last2 = 1;
int last1 = 1;
int cur;
int i;
if (n == 1 || n == 2) {
return 1;
}
for (i = 3; i <= n; i++) {
cur = last1 + last2;
last2 = last1;
last1 = cur;
}
return cur;
}
#endif
int main() {
int n;
printf("请输入要计算的斐波那契数列的项数:\n");
scanf("%d", &n);
printf("%d\t", Fib(n));
system("pause");
return 0;
}