递归的理解与应用(详细)(上)

简介: 递归的理解与应用(详细)

一、▶️什么是递归

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;
}

2.4.2执行结果



相关文章
|
9月前
|
算法 数据库
递归最佳解析
递归最佳解析
101 0
|
9月前
最大公约数循环与递归版本
最大公约数循环与递归版本
58 0
|
6月前
|
算法
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
153 0
|
9月前
|
机器学习/深度学习 编译器 C语言
关于函数递归的基础
关于函数递归的基础
62 5
|
9月前
|
算法 Java Serverless
【Java递归】一篇文章带你了解,什么是递归 ,递归的特点,递归应用场景,递归练习题
【Java递归】一篇文章带你了解,什么是递归 ,递归的特点,递归应用场景,递归练习题
180 0
糊里糊涂的递归和递归经典题(下)
糊里糊涂的递归和递归经典题(下)
|
算法 C语言
糊里糊涂的递归和递归经典题(上)
糊里糊涂的递归和递归经典题
106 0
认识了解递归的原理,学会递归的运用
认识了解递归的原理,学会递归的运用