1,编写一个函数 reverse_string(char* string)(递归实现)
将参数字符串中的字符反向排列,不能使用c函数库中的字符串操作函数}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Strlen(const char* str)
{
if (*str == '\0')
{
return 0;
}
return 1 + Strlen(str + 1);
}
char* Reverse_string(char* str)
{
if (*str == '\0')
{
return 0;
}
char temp = 0;
int len = Strlen(str);
temp = *str;//首字符暂存起来,
*str = *(str + len - 1);//最后一个字符放在首元素的位置
*(str + len - 1) = '\0';//后面位置用\0补充
if (Strlen(str + 1) > 1)//进行递归
{
Reverse_string(str + 1);
}
*(str + len - 1) = temp;//将首位置的元素放在后面的位置,
return str;
}
int main()
{
char str[1024] = " ";
printf("输入需要反转的字符串:");
scanf("%s", &str);
printf("%s\n",Reverse_string(str));
system("pause");
return 0;
}
2,实现n的k次方:
(1)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Function(int n, int k)
{
int num = 1;
for (int i = 1; i <= k; ++i)
{
num *= n ;
}
return num;
}
int main()
{
int n = 0;
int k = 0;
printf("请输入n和k的值:");
scanf("%d %d", &n, &k);
int ret = Function(n, k);
printf("%d\n", ret);
system("pause");
return 0;
}
(2)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Function(int n, int k)//前提是n和k均为非负整数
{
if (k == 1)
{
return n;
}
return n*Function(n, k - 1);
}
int main()
{
int n = 0;
int k = 0;
printf("请输入n和k的值:(n和k为非负整数)");
scanf("%d %d", &n, &k);
int ret = Function(n, k);
printf("%d\n", ret);
system("pause");
return 0;
}
3,写一个递归函数DigitSum(n),输入一个人非负整数,返回组成它的每位数字之和:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int DigitSum(int n)
{
if (n > 0)
{
return n % 10 + DigitSum(n / 10);
}
return 0;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = DigitSum(n);
printf("%d\n", ret);
system("pause");
return 0;
}
4,递归和非递归实现strlen
(1)
#include<stdio.h>
#include<stdlib.h>
int Strlen(char* str)
{
if (*str == '\0')
{
return 0;
}
return 1 + Strlen(str + 1);
}
int main()
{
char str[] = "asdfgh";
printf("%d\n",Strlen(str));
system("pause");
return 0;
}
(2)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int strlen(const char* str)
{
if (*str == '\0')
{
return 0;
}
int count = 0;
while (*str != '\0')
{
++str;
++count;
}
return count;
}
int main()
{
char str[1024] = " ";
printf("请输入要求长度的字符串:");
scanf("%s", str);
printf("%d\n", strlen(str));
system("pause");
return 0;
}
5,递归和非递归求N的阶乘
(1)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Factor(int n)
{
if (n == 1)
{
return 1;
}
int num = 1;
for (int i = 2; i <= n; ++i)
{
num *= i;
}
return num;
}
int main()
{
int n = 0;
int num = 0;
printf("请输入要求阶乘的数:");
scanf("%d", &n);
num = Factor(n);
printf("%d\n", num);
system("pause");
return 0;
}
(2)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Factor(int n)
{
if (n == 1)
{
return 1;
}
if (n > 1)
{
return n * Factor(n - 1);
}
return 0;
}
int main()
{
int n = 0;
printf("请输入要求阶乘的数:");
scanf("%d", &n);
int num = 0;
num = Factor(n);
printf("%d\n", num);
system("pause");
return 0;
}
6,递归和非递归实现第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 num = 0;
int num1 = 1;
int num2 = 1;
for (int i = 3; i <= n; ++i)
{
num = num1 + num2;
num1 = num2;
num2 = num;
}
return num;
}
int main()
{
int n = 0;
int num = 0;
printf("请输入要求的项数:");
scanf("%d", &n);
num = Fib(n);
printf("%d\n", num);
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;
}
if (n > 2)
{
return Fib(n - 1) + Fib(n - 2);
}
return 0;
}
int main()
{
int n = 0;
int num = 0;
printf("请输入要求的项数:");
scanf("%d", &n);
num = Fib(n);
printf("%d\n", num);
system("pause");
return 0;
}
7,打印一个多位数的每一位(从高往低)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void Print(int num)
{
if (num > 9)
{
Print(num / 10);
}
printf("%d\t", num % 10);
}
int main()
{
int n = 0;
printf("请输入一个非负多位数:");
scanf("%d", &n);
Print(n);
system("pause");
return 0;
}