递归实现字符串逆序、n的阶乘、字符串长度strlen、整数的每一位之和、n的k次方
递归,又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。也可以理解为自我复制的过程。
了解了递归的概念,下面看一下用递归实现的训练题递归:
- 递归实现字符串逆序
#include<stdio.h>
int reverse_string(char* p, int left, int right)
{
if (right <= left)
{
return 0;
}
else
{
char temp = p[left];
p[left] = p[right];
p[right] = temp;//字符串数组的左右两端进行交换,实现逆序
return reverse_string(p, left + 1, right - 1);//返回调用函数实现循环
}
}
int my_strlen(char *str)
{ //这里是简单模拟了strlen的用法,计算这个数组的长度
if (*str == '\0')
{
return 0;
}
else
{
return 1 + my_strlen(str + 1);
}
}
int main()
{
char ch[] = { "abcdedhgin" };
int left = 0;
int right = my_strlen(ch)-1;
reverse_string(ch, left, right);
int i;
for (i = 0; i <= right; ++i)
{
printf("%c", ch[i]);//打印新数组
}
return 0;
}
- 递归实现n的阶乘
#include<stdio.h>
int factorial(int n)
{
if (n == 1)
{
return 1;
}
else
{
return n*factorial(n - 1);//每次返回的值都是n-1直到1停止
}
}
int main()
{
int n;
scanf("%d", &n);
printf("%d\n",factorial(n));
return 0;
}
- 递归实现字符串长度strlen
#include<stdio.h>
int my_strlent(char ch[])
{
int sz = 0;
if (ch[0] == '\0')//ch中的字符串以\0结尾
{
return sz;
}
else
{
return 1 + my_strlent(ch + 1);
}
}
int main()
{
char ch[] = {"as\nhudgy\\bhz"};
my_strlent(ch);
printf("%d", my_strlent(ch));
}
- 递归实现整数的每一位之和
#include<stdio.h>
int sum(int x)
{
if (x <= 9)
{
return x;
}
else
{
return x % 10 + sum(x / 10);//%10就可以取到个位,除10则可以去掉个位,比如1234,1234%10==4,1234/10==123
}
}
int main()
{
int x;
scanf("%d", &x);
printf("%d",sum(x));
}
- 递归实现n的k次方
#include<stdio.h>
int power(int n, int k)
{
if (k ==0)
{
return 1;
}
else
{
return n * power(n, k - 1);
}
}
int main()
{
int n, k;
scanf("%d%d", &n, &k);
printf("%d\n", power(n, k));
return 0;
}
递归的方法多看看代码,就很容易理解了。