1. 递归和非递归分别实现求第n个斐波那契数。
(1)循环算法
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Fib(int n) {
if (n == 1 || n == 2) {
return 1;
}
int last1 = 1;
int last2 = 1;
int cur = 0;
for (int i = 3; i <= n; i += 1) {
cur = last1 + last2;
last2 = last1;
last1 = cur;
}
return cur;
}
int main() {
printf("请输入需要求的第n个斐波那契数:");
int n = 0;
scanf("%d", &n);
printf("%d\n", Func(n));
system("pause");
return 0;
}
(2)递归算法
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Fib(int n) {
if (n == 1 || n == 2) {
return 1;
}
return Fib(n - 1) + Fib(n - 2);
}
int main() {
printf("请输入需要求的第n个斐波那契数:");
int n = 0;
scanf("%d", &n);
printf("%d\n", Fib(n));
system("pause");
return 0;
}
(3)递归算法,减少重复计算方法
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Fib(int n, int last2, int last1) {
if (n == 1) {
return last2;
}
if (n == 2) {
return last1;
}
return Fib(n - 1, last1 , last2 + last1);
}
int main() {
printf("请输入需要求的第n个斐波那契数:");
int n = 0;
scanf("%d", &n);
printf("%d\n", Fib(n, 1, 1));
system("pause");
return 0;
}
**6.递归和非递归分别实现求n的阶乘 **
(1)递归算法
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Factor(int n) {
if (n < 0) {
return 0;
}
else if (n == 0) {
return 1;
}
else if (n == 1) {
return 1;
}
else
return n * Factor(n - 1);
}
int main() {
printf("请输入一个正整数,输出其阶乘:");
int n = 0;
scanf("%d", &n);
printf("%d\n",Factor(n));
system("pause");
return 0;
}
(2)循环算法
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Factor(int n) {
int ret = 1;
for (int i = 1; i <= n; ++i) {
ret *= 1 * i;
}
return ret;
}
int main() {
printf("请输入一个正整数,求其阶乘:");
int n = 0;
scanf("%d", &n);
printf("%d\n", Factor(n));
system("pause");
return 0;
}
**7.递归方式实现打印一个整数的每一位 **
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Print(int n) {
if (n > 9) {
Print(n / 10);
}
printf("%d ",n % 10);
}
int main() {
printf("请输入一个整数:");
int n = 0;
scanf("%d", &n);
Print(n);
system("pause");
return 0;
}