1. 递归和非递归分别实现求第n个斐波那契数
递归实现:
//递归实现求第n个斐波那契数
//斐波那契数列是指前两项为1,从第三项开始,每一项都等于前两项之和的数列
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Fib(int n) {
if (n == 1 || n == 2) {
return 1;
}
else {
return Fib(n - 1) + Fib(n - 2);
}
}
int main() {
int i = 0;
printf("请输入想求的第n个斐波那契数:");
scanf("%d", &i);
if (i <= 0) {
printf("您的输入有误!\n"); //判断用户输入是否合法
}
else {
Fib(i); //进入递归
}
printf("第%d个斐波那契数为:%d\n", i, Fib(i));
system("pause");
return 0;
}
非递归实现:
//非递归实现求第n个斐波那契数
//斐波那契数列是指前两项为1,从第三项开始,每一项都等于前两项之和的数列
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main() {
int i = 0;
int a = 1;
int b = 1;
int c = 0;
int n = 0;
printf("请输入想求的第n个斐波那契数: ");
scanf("%d", &n);
if ((n < 3) && (n > 0)) {
printf("第%d个斐波那契数为: %d\n", n, a);
}
else if (n <= 0) {
printf("您的输入有误!\n");
}
else {
for (i = 2; i < n; i++) {
c = a + b;
a = b;
b = c;
}
printf("第%d个斐波那契数为:%d\n", n, c);
}
system("pause");
return 0;
}
2. 编写一个函数实现n^k,使用递归实现
//编写一个函数实现n^k,使用递归实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Function(int n, int k) {
if (k == 0) {
return 1;
}
else if (k == 1) {
return n;
}
else {
return n * Function(n, k - 1);
}
}
int main() {
int n = 0;
int k = 0;
printf("请输入n^k中的n:\n");
scanf("%d", &n);
printf("请输入n^k中的k:\n");
scanf("%d", &k);
if (k < 0) { //判断用户输入是否合法
printf("您的输入有误!\n");
}
else {
printf("%d\n", Function(n, k));
}
system("pause");
return 0;
}
3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
//写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
//例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int DigitSum(int n) {
if (n == 0) {
return 0;
}
else {
return n % 10 + DigitSum(n / 10);
}
}
int main() {
printf("请输入一个非负整数:\n");
int n = 0;
scanf("%d", &n);
if (n < 0) {
printf("您的输入有误!\n");
}
else {
printf("结果是:%d\n", DigitSum(n));
}
system("pause");
return 0;
}
4. 编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
//编写一个函数 reverse_string(char * string)(递归实现)
//实现:将参数字符串中的字符反向排列。
//要求:不能使用C函数库中的字符串操作函数。
#include <stdio.h>
#include <stdlib.h>
int Reverse_string(char* string) {
if (*string == '\0') {
return 0;
}
else {
Reverse_string(string + 1);
printf("%c", *string);
}
}
int main() {
char arr[] = "asdfgh";
Reverse_string(arr);
system("pause");
return 0;
}
5. 递归和非递归分别实现strlen
//递归和非递归分别实现strlen
//非递归实现
#include <stdio.h>
#include <stdlib.h>
int str1(const char* arr) {
int i = 0;
while (*arr) {
arr++;
i++;
}
return i;
}
int test4() {
char arr[] = "abed";
printf("%d\n", str1(arr));
system("pause");
return 0;
}
//递归实现
int str2(char* arr) {
if (*arr == '\0') {
return 0;
}
else {
return 1 + str2(arr + 1);
}
}
int main() {
char arr[] = "abcd";
printf("%d\n", str2(arr));
system("pause");
return 0;
}
6. 递归和非递归分别实现求n的阶乘
//递归和非递归分别实现求n的阶乘
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//非递归实现
int main() {
printf("请输入一个整数:\n");
int n = 0;
scanf("%d", &n);
int i = 1;
int sum = 1;
for (i = 1; i <=n; i++) {
sum *= i;
}
printf("%d的阶乘是:%d\n", n, sum);
system("pause");
return 0;
}
//非递归实现
int Fact(int n) {
if (n == 1) {
return 1;
}
else {
return n * Fact(n - 1);
}
}
int main() {
printf("请输入一个整数:\n");
int n = 0;
scanf("%d", &n);
if (n < 1) {
printf("您的输入有误!\n");
}
else {
printf("%d的阶乘是:%d\n", n, Fact(n));
}
system("pause");
return 0;
}
7. 递归方式实现打印一个整数的每一位
//递归方式实现打印一个整数的每一位
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void Print(n) {
if (n < 10) {
printf("%d ", n);
}
else {
Print(n / 10);
printf("%d ", n % 10);
}
}
int main() {
printf("请输入一个整数:\n");
int n = 0;
scanf("%d", &n);
if (n < 0) {
printf("您的输入有误!\n");
}
else {
Print(n);
}
system("pause");
return 0;
}