一、▶️什么是递归
1.1函数递归的定义
递归**😗* 程序调用自身的编程技巧称为递归
1.2函数递归的优缺点
优点:简化代码,大量的重复性过程被简化,“大事化小”的编程思想 。
缺点: 1. 执行效率慢,以为每次调用都会在栈区开辟一块空间,也就是压栈。
2.如果递归次数太多,会造成 栈溢出问题,(栈区大小:2M或1M。函数内申请的变量、数组,是在栈(stack)中申请的一段连续的空间。)比如求 斐波拉契问题数值过大后造成栈溢出。
1.3函数递归的两个必要条件
1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。
2.每次递归调用之后越来越接近这个限制条件
二.🚩 递归入门(通过一道例题)
🐱打印整数每一位
题目要求:接收一个整型值(无符号),按照顺序打印它的每一位。
例如:
输入:1234,输出 1234
2.1思路分析
解题思路:这种输入输出数字的题,我们一定要想到取模和取余的方法, 并且要有限制条件,每次函数递归后,都会越来越接近这个值。 所以先函数递推1234%10=4,123%10=3,12%10=2,1%10=1,给定限制条件n>9 ,直到n=1,最后函数回归打印出1234。
2.2代码
#include<stdio.h> int print(int n) { if (n > 9) { print(n / 10); //每次缩小一位 } printf("%d ", n % 10);//打印最后一位数 } int main() { int n = 0; scanf("%d", &n);![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/4cd4680f47f2405fbcb87a70cb6f17f1.png#pic_center) print(n); return 0; }
2.2.1 执行结果
2.3递归思路图解
2.4 补充:打印4321
搞懂流程后,逆序打印也变得很好理解,我只需要**先输出后递**即可
2.4.1代码实现
#include<stdio.h> int print(int n) { printf("%d ", n % 10);//放在递归函数之前,将先打印 if (n > 9) { print(n / 10); } //printf("%d ", n % 10); } int main() { int n = 0; scanf("%d", &n); print(n); return 0; }