2026/08/03 编程中递归思想的应用(以C语言为例)

C语言程序的基本单位是函数,每个函数都可以解决一个问题,但是如果此时一个程序中有n个相同的问题出现,则就需要调用对应的函数n次,这样会导致程序冗杂,可读性较差,可以使用递归函数解决,当然注意递归函数不是万能的,一般用于解决数学问题,递归函数指的是在一个函数内部反复调用自己的函数,递归函数具有递进和回归的过程,就相当于把一个类似的大问题拆分为很多类似的小问题,再把每个小问题的结果作为上一个问题的答案,一层一层进行解决。使用递归函数的时候要谨慎,必须要提前写清楚终止条件,如果不写终止条件,就会变为死循环,相当于一直调用自己,由于每调用一次函数,内核都会提供一块栈空间,就会栈溢出,从而发生段错误,导致程序崩溃。

例1:计算n的阶乘

#include <stdio.h>

int func(unsigned int n)
{
	if (1 == n)					//提前写好递归终止条件
	{
		return 1;
	}
	else
	{
		return n * func(n - 1);
	}

}
int main(int argc, char const *argv[])
{
	printf("please input n: ");
	unsigned int n;
	scanf("%u", &n);
	int result = func(n);
	printf("result: %d\n", result);\

	return 0;
}

运行结果:
image

例2:将输入的字符逆序输出

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
bool func(char *ptr)
{
	if ('\0' == *ptr)								//判断字符串是否为空
	{
		return false;
	}
	func(ptr + 1);									//递归调用函数,传入下一个字符的地址
	printf("%c", *ptr);								//打印当前字符

	return true;
}
int main(int argc, char const *argv[])
{
	char *ptr = NULL;
	ptr = (char *)calloc(1, 100);					//申请100个字节的内存空间
	if (ptr == NULL)								//判断内存是否申请成功
	{	
		printf("Memory allocation failed\n");
		return 1;
	}
	else
	{
		printf("Memory allocation successful\n");
	}

	printf("Enter a string: ");
	scanf("%s", ptr);								//读取用户输入的字符串
	if (func(ptr))									//调用函数并判断返回值
	{
		printf("\n");
		printf("Function returned true\n");
	}
	else
	{
		printf("Function returned false\n");
	}

	free(ptr);										//释放内存空间
	ptr = NULL;										//将指针置为空,避免悬空指针

	return 0;
}

运行结果:
image

例3:将输入的字符的长度输出

#include <stdio.h>
#include <stdlib.h>

int func(char *ptr)
{
	if ('\0' == *ptr)								//判断字符串是否为空
	{
		return 0;
	}
	else
	{	
		return 1 + func(ptr + 1);					//递归调用函数,计算字符串长度
	}
	
	
}
int main(int argc, char const *argv[])
{
	char *ptr = NULL;
	ptr = (char *)calloc(1, 100);					//申请100个字节的内存空间
	if (ptr == NULL)								//判断内存是否申请成功
	{	
		printf("Memory allocation failed\n");
		return -1;
	}
	else
	{
		printf("Memory allocation successful\n");
	}

	printf("Enter a string: ");
	scanf("%s", ptr);								//读取用户输入的字符串
	printf("String length: %d\n", func(ptr));		//调用函数计算字符串长度
	free(ptr);										//释放内存空间
	ptr = NULL;										//将指针置为空,避免悬空指针

	return 0;
}

运行结果:

image

posted @ 2026-08-03 16:56  !城北徐公.!  阅读(3)  评论(0)    收藏  举报