算法 | 妙用递归(顺序&逆序)打印一个数的每一位

简介: - 程序调用自身的编程技巧称为递归( recursion)。递归作为一种算法在程序设计语言中广泛应用- 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问-题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量- 递归的能力在于用有限的语句来定义对象的无限集合- 一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回

在这里插入图片描述
啊我摔倒了..有没有人扶我起来学习....

前言

  • 程序调用自身的编程技巧称为递归( recursion)。递归作为一种算法在程序设计语言中广泛应用
  • 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问-题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量
  • 递归的能力在于用有限的语句来定义对象的无限集合
  • 一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回

一、分析问题

  • 假如我要打印出123456的每一位(先不考虑顺序,能打印就行),那我们按照递归的思想(==大事化小,小事化了——把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解==)分析一下

在这里插入图片描述
可以看出来,用10来对123456取余,就会得到个位数6;然后用10123456整除,得到12345。这就是一个==与原问题相似的规模较小的问题==

二、设计递归代码

  • 我们把递归(==递推+回归==)打印每一位封装成一个函数
void recursion_print(int x)
{
    if (x > 9)
        recursion_print(x / 10);
    printf("%d ", x % 10);    
}
输出结果: 在这里插入图片描述
  • 递归不能无限循环下去,于是设计一个判断条件,当x < 9时,就已经是一位数了,没必要再递推下去
  • 相信刚学的铁汁一开始还是弄不懂为啥这样写,是怎么实现的?别担心,咱们上图解释。123456太长了,图要画很大,所以假设我们输入123

在这里插入图片描述

所以会先打印出1,然后是2,最后是3,就可以认为这是顺序打印了。

  • 假如我想逆序打印呢?我们思考一下。刚刚123中,3最先被取出来却在最后打印,是因为要等最后一个递推结束后才开始执行打印那一行代码,而最后一个递推中,x1,所以先打印出了1

那这样的话,我一开始先让3打印出来不就好啦?我们尝试调整一下代码

void recursion_print(int x)
{
    printf("%d ", x % 10);
    if (x > 9)
        recursion_print(x / 10);    
}
输出结果: 在这里插入图片描述==哈哈还真行!!==

在这里插入图片描述

相关文章
|
9天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
27 2
|
5月前
|
算法 C++
算法笔记:递归(c++实现)
算法笔记:递归(c++实现)
|
1月前
|
算法 搜索推荐 Shell
数据结构与算法学习十二:希尔排序、快速排序(递归、好理解)、归并排序(递归、难理解)
这篇文章介绍了希尔排序、快速排序和归并排序三种排序算法的基本概念、实现思路、代码实现及其测试结果。
20 1
|
5月前
|
存储 算法 程序员
数据结构与算法===递归
数据结构与算法===递归
|
1月前
|
算法 定位技术
数据结构与算法学习九:学习递归。递归的经典实例:打印问题、阶乘问题、递归-迷宫问题、八皇后问题
本文详细介绍了递归的概念、重要规则、形式,并展示了递归在解决打印问题、阶乘问题、迷宫问题和八皇后问题等经典实例中的应用。
40 0
|
3月前
|
算法
【算法】递归、搜索与回溯——汉诺塔
【算法】递归、搜索与回溯——汉诺塔
|
4月前
|
算法 Python
python中算法递归错误(Recursion Errors)
【7月更文挑战第18天】
69 1
|
3月前
|
算法
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
|
3月前
|
算法
【算法】递归、搜索与回溯——简介
【算法】递归、搜索与回溯——简介
|
5月前
|
机器学习/深度学习 算法 C语言
详细介绍递归算法在 C 语言中的应用,包括递归的基本概念、特点、实现方法以及实际应用案例
【6月更文挑战第15天】递归算法在C语言中是强大力量的体现,通过函数调用自身解决复杂问题。递归涉及基本概念如自调用、终止条件及栈空间管理。在C中实现递归需定义递归函数,分解问题并设定停止条件。阶乘和斐波那契数列是经典应用示例,展示了递归的优雅与效率。然而,递归可能导致栈溢出,需注意优化。学习递归深化了对“分而治之”策略的理解。**
108 7