递归和非递归分别实现求第n个斐波那契数。
非递归情况:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main() {
int num1 = 1;
int num2 = 1;
int n;
int result;
printf("请输入n的值:\n");
scanf("%d",&n);
if (n == 1 || n == 2) {
printf("第%d个斐波那契数的值是:1\n", n);
system("pause");
return 0;
}
for (int i = 3; i <= n; ++i) {
result = num1 + num2;
num1 = num2;
num2 = result;
}
printf("第%d个斐波那契数的值是:%d\n",n,result);
system("pause");
return 0;
}
递归:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Fib_num(int n) {
if (n == 1 || n == 2) {
return 1;
}
return Fib_num(n - 1) + Fib_num(n - 2);
}
//尾递归
int Fib(int num, int num1, int num2) {
if (num == 1 || num == 2) {
return num2;
}
int temp;
temp = num2;
num2 = num2 + num1;
num1 = temp;
return Fib(num - 1, num1, num2);
}
int main() {
int n;
int result;
printf("请输入n的值:\n");
scanf("%d",&n);
result = Fib_num(n);
printf("第%d个斐波那契数列的值是:%d\n", n, result);
result = Fib(n,1,1);
printf("第%d个斐波那契数列的值是:%d\n", n, result);
system("pause");
return 0;
}