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;
}
运行结果:

例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;
}
运行结果:

例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;
}
运行结果:

作者:bbzhu04@gmail.com ,多有不妥之处,望批评指正
本文原创,欢迎转载;转载请在文章显著位置标明原文链接: href="https://www.cnblogs.com/zhubb/p/22180975"
保留所有权限,未经许可禁止篡改、商用发布。

浙公网安备 33010602011771号