1.用递归将一个字符串数组颠倒
dgdd函数引用string库中的strlen(遇到\0停止)求字符串长度,每调用一次函数末尾字符交换到首位,\0 前移一位,整个数组右移一位进行递归,直到数组长度小于二。
#include<stdio.h>
#include<string.h>//strlen字符串长度
//定义函数
void dgdd(char m[]) {
int sz = strlen(m);
char a = m[0];
m[0] = m[sz - 1];
m[sz - 1] = '\0';
if (strlen(m+1) >= 2) {
dgdd(m + 1);
}
m[sz - 1] = a;
}
//主函数 输入一个长度不超过10的一个字符串
int main(){
char m[11] = "0";
for (int i = 0; i < 10; i++) {
scanf_s("%c", &m[i],10);
}
dgdd(m);
printf("%s",m);
return 0;
}
2.青蛙跳台!(输入台阶数,青蛙一次可以上一格或两格,有多少种上法)
可以逆向思维,知道台阶数后,从台阶上下来有多少种方法,首先若有一阶台阶只有一种下法,若有两阶台阶则有两种下法,两阶台阶以上可以先下一阶或先下两阶,所以两阶以上,下一阶台阶进行递归+下两阶台阶进行递归。直到台阶为零。
#include<stdio.h>
//定义函数
int qwttj(int m) {
if (m == 1)
return 1;
else if (m == 2)
return 2;
else {
return qwttj(m - 1) + qwttj(m - 2);
}
}
//主函数
int main(){
int n = 0;
printf("请输入总台阶数:");
scanf_s("%d", &n);
int i=qwttj(n);//多少次上法
printf("%d", i);
return 0;
}
3.利用函数递归将一个数中每个数字以空格分开输出
#include<stdio.h>
//定义函数
void digui(int m) {
if (m >= 10) {
digui(m/10);
}
printf("%d ", m%10);
}
//主函数
int main(){
int n = 0;
scanf_s("%d", &n);
digui(n);
return 0;
}
4.用递归求阶乘
#include<stdio.h>
//定义函数
int jiecheng(int b) {
if (b > 0)
return b * jiecheng(b - 1);
else
return 1;
}
//主函数
int main(){
int a = 0;
scanf_s("%d", & a);
int m = jiecheng(a);
printf("%d", m);
return 0;
}
5.用递归求字符串的长度
#include<stdio.h>
//定义函数
int lenzfc(char* str) {
if (*str != '\0') {
return 1+lenzfc(str + 1);
}
else
return 0;
}
//主函数
int main(){
char a[] = "abc";
int len = lenzfc(a);
printf("%d", len);
return 0;
}