【递归可以干什么】1#重复执行某种模式

简介: 【递归可以干什么】1#重复执行某种模式

递归程序设计是计算机算法设计的重要组成部分,是衡量程序设计水平的关键指标。递归程序应用十分广泛,如数据结构中树、图、快速排序等核心算法。然而,递归程序的学习并非易事,要求较高的抽象思维和逻辑思维,即便是拥有多年开发经验的资深工程师,依然会“谈归色变”。


介绍递归的博客众多,然而初学者在阅读后,依然不知所措,复杂的概念、复杂的递归树、复杂的思想,让大家望而却步,亟需新的思路来重新梳理递归的本质。


本系列博客将介绍递归的方方面面有趣的知识点和案例,由浅入深,试图从各个视角来深入理解递归,最终实现活运用递归解决实际问题。


问题

所谓递归,指的就是某函数foo不停的调用自身,直到满足某条件后结束调用自己,如下:


def foo():
  if condition is true:
    return 
  do some interesting things
  foo()


不难发现,foo()函数一直在不停的在调用自己,而每一次调用自己,[do some interesting things] 这块代码都会被执行一次,因此,递归可以理解为重复的在执行一段有趣的代码,递归调用了n次,则这段有趣代码就被执行了n次。


如果单就这一点来看,递归的功能与循环结构十分类似,如下是循环结构的一般模式:

for i in range(n):
  do some interesting things

基于上述认识,可以利用递归来实现循环结构能够做的一些事情。


方法

利用递归实现100次打印字符串’hello’,即print(‘hello’)的代码需要重复执行100次。利用递归的重复执行[do some interesting things]特性,可以实现该功能,关键点在于如何精确的控制递归执行的次数。


定义变量n,每调用一次自身就减少1,这样即可实现控制递归执行的次数,代码如下:

def foo(n):
    if n == 0:
        return
    print('hello')
    foo(n-1)
if __name__ == '__main__':
    foo(100)

结语

本节介绍了递归的重复执行代码块的特性,并通过精确控制递归调用的次数,实现了一种重复打印字符串的效果。是不是觉得很有趣呢?当深入理解递归后,并充分利用其特性,可以实现一些十分有趣的功能。


递归,还有太多的细节值得我们去发掘,如果您对递归感兴趣,欢迎持续关注后续递归算法系列博客。


目录
相关文章
|
2月前
|
算法 前端开发
在系统中查找重复文件
在系统中查找重复文件
27 0
|
8月前
|
消息中间件 数据采集 Kafka
每次join之后没有正确处理数据的重复或缺失情况
每次join之后没有正确处理数据的重复或缺失情况
85 1
|
8月前
判断两棵树是否完全一致
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
87 0
|
9月前
两个有序链表序列的合并(附加代码模式)
两个有序链表序列的合并(附加代码模式)
43 1
|
10月前
|
存储 Java 测试技术
打印不重复的字符串全排列(递归)
本文将详细解析在生成不重复的字符串全排列时使用的Java代码。首先,我们将展示一个常规的全排列生成方法,然后介绍如何通过使用HashSet来跳过已经尝试过的字符,从而避免生成重复的全排列。最后,我们提供了一道相关的编程题目以供练习。
81 0
打印不重复的字符串全排列(递归)
|
设计模式 消息中间件 JavaScript
干掉 “重复代码”,这三种方式绝了!
干掉 “重复代码”,这三种方式绝了!
36911 2
干掉 “重复代码”,这三种方式绝了!
Python 在不改变顺序的前提下,去除列表中相邻且重复的元素
Python 在不改变顺序的前提下,去除列表中相邻且重复的元素
【小白学算法】10.递归的调用机制、使用时要注意的规则
【小白学算法】10.递归的调用机制、使用时要注意的规则
【小白学算法】10.递归的调用机制、使用时要注意的规则
|
安全 Linux
5 种方法重复执行历史命令
5 种方法重复执行历史命令
186 0