C语言-初识递归
- 什么是递归?——就是函数自己调用自己
百度上是这么说的: - 程序调用自身的编程技巧成为递归。递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序,就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
- 递归主要思考方式在于:把大事化小。
- 递归的两个必要条件以及注意
(1)存在限制条件,当满足这个限制条件的时候,递归便不再继续。
(2)每次递归调用之后越来越接近这个限制条件。
注意
(3)递归必须要有结束条件,否则程序将崩溃。
(4)递归函数,当条件终止后就会逐层返回 - 例题
接收一个整型值(无符号),按照顺序打印它的每一位,例如输入123,打印1 2 3
//纯净代码——不带注释
#include<stdio.h>
//函数定义
//void说明函数无返回值
void print(int n)
{
if (n > 9)
{
print(n / 10);
}
printf("%d ", n % 10);
}
int main(void)
{
//定义无符号型整型
unsigned int num = 0;
scanf_s("%d", &num);
//调用函数
print(num);
return 0;
}
代码解析:
首先将输出的123传到n这里
程序运行到if这里,
进行判断,123>9条件成立,进行下一步,进入if
接着将123/10 = 12余的3丢掉
函数接着调用自己
12>9条件成立,继续进行下一步,进入if
再将12/10 = 1 余的2丢掉
函数再次调用自己
此时1>9条件不成立,进行到printf处,1%10 = 0余1,将1输出
到现在,递归函数的条件已经终止(不成立),开始进行逐层返回
梳理一下层数
1层 输入 123,
2层 输入 12
3层 输入 1条件不成立 将1输出
由2层开始逐层向上返回
2层 12%10 = 1余数 2,将2输出
1层 123%10 = 12余数3,将3输出
最后得出结果1 2 3
以下为图解