TEST7
1.递归和非递归实现求第n个斐波那契数
#include <stdio.h>
#include <stdlib.h>
int Fib(int n) {
if (n <= 2) {
return 1;
}
return Fib(n - 1) + Fib(n - 2);
}
int FibN(int n) {
int an,an_1 = 1, an_2 = 1;
int i;
if (n < 2) {
return 1;
}
for (i = 2; i < n; ++i) {
an = an_1 + an_2;
an_2 = an_1;
an_1 = an;
}
return an;
}
int main() {
printf("%d\n", Fib(8));
printf("%d\n", FibN(8));
system("pause");
return 0;
}
2.递归实现求n的k次方
#include <stdio.h>
#include <stdlib.h>
int Power(int n, int k) {
if (k > 0) {
return Power(n, k - 1)*n;
}
return 1;
}
int main() {
printf("%d\n", Power(2, 3));
system("pause");
return 0;
}
3.写一个递归函数,输入一个非负整数,返回组成它的数字之和
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int DigitSum(int n) {
if (n > 9) {
return DigitSum(n / 10) + n % 10;
}
else {
return n;
}
}
int main() {
int n = 0;
printf("请输入一个非负整数: ");
scanf("%d", &n);
int ret = DigitSum(n);
printf("组成它的数字之和为: %d\n", ret);
system("pause");
return 0;
}
4.递归实现字符串中的字符反向排列
#include <stdio.h>
#include <stdlib.h>
void reverse_string(char* string) {
if (* string != '\0') {
string++; //一直向后进行统计元素
reverse_string(string);
printf("%c", *(string - 1));//从字符串最后一个元素输出
}
}
int main() {
char* string = "asdfgh";
reverse_string(string);
printf("\n");
system("pause");
return 0;
}
5.递归和非递归实现strlen
#include <stdio.h>
#include <stdlib.h>
int Strlen(char* string) {
if (* string != '\0') {
return 1 + Strlen(string + 1);
}
else {
return 0;
}
}
int StrlenN(char* string) {
int count = 0;
while (* string != '\0') {
count++;
string++;
}
return count;
}
int main(){
char string[] = "asdfghjk";
int ret_1 = Strlen(string);
int ret_2 = StrlenN(string);
printf("%d\n", ret_1);
printf("%d\n", ret_2);
system("pause");
return 0;
}
6.递归和非递归实现求n的阶乘
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Factor(int n) {
if (n <= 1) {
return 1;
}
else {
return n * Factor(n - 1);
}
}
int FactorN(int n) {
int ret = 1;
int i = 0;
for (i = 1; i <= n; ++i) {
ret = ret * i;
}
return ret;
}
int main() {
int n = 0;
printf("请输入一个大于0的整数: ");
scanf("%d", &n);
printf("%d\n", Factor(n));
printf("%d\n", FactorN(n));
system("pause");
return 0;
}
7.递归方式实现打印一个整数的每一位
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void Print(int n) {
if (n < 10) {
printf("%d ", n);
}
else {
Print(n / 10);
printf("%d ", n % 10);
}
}
int main() {
int n = 0;
printf("请输入一个大于0的整数: ");
scanf("%d", &n);
Print(n);
printf("\n");
system("pause");
return 0;
}