递归实现字符串逆序、n的阶乘、字符串长度strlen、整数的每一位之和、n的k次方

递归实现字符串逆序、n的阶乘、字符串长度strlen、整数的每一位之和、n的k次方

递归,又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。也可以理解为自我复制的过程。
了解了递归的概念,下面看一下用递归实现的训练题递归:

  1. 递归实现字符串逆序
#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;

}
  1. 递归实现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;
}
  1. 递归实现字符串长度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));

}
  1. 递归实现整数的每一位之和
#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));
}
  1. 递归实现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;
}

递归的方法多看看代码,就很容易理解了。

猜你喜欢

转载自blog.csdn.net/weixin_45796387/article/details/111148639