浅谈编程思维——循环结构

浅谈编程思维——循环结构在程序中循环结构是一个很重要的概念 但理解它并不难 先回忆一下上次说的分支结构 我们知道程序就是告诉计算机做事一系列命令 做任何事都有一定的顺序 程序执行就是基于分支结构和循环结构等形式有序的做事 我们使用的电脑操作系统 手机 APP 软件

大家好,欢迎来到IT知识分享网。

在程序中循环结构是一个很重要的概念,但理解它并不难。先回忆一下上次说的分支结构。我们知道程序就是告诉计算机做事一系列命令。做任何事都有一定的顺序,程序执行就是基于分支结构和循环结构等形式有序的做事。我们使用的电脑操作系统,手机 APP 软件,无不受这个规律来支配着。分支结构决定走那条路,而循环确定了周而复始的运行。

循环,汉语意思事物周而复始地运动和变化。这其中有重复意思。在编程中循环有两重意思:repetition (重复), loop(环形回路)。因而好多编程书籍中循环结构的英文写法是「repetition structure, loop structure」

浅谈编程思维——循环结构

说了抽象的解释,我们进入生活化场景。从重复层面入手,这种场景在生活中比比皆是。

例如某一个月黑风高的夜晚,你躺在床上辗转反侧无法入睡,怎么办呢?开始数羊,1只羊,2只羊,3只羊,4只羊,5只羊……也许无聊的睡着了,也许就更烦了。很正常,人类天生讨厌重复的东西。

这里告诉你一个好消息,计算机却最喜欢干重复的事情,我们讨厌的那些重复的事情,都可以交给它做。

浅谈编程思维——循环结构

比如在学校体育课上,体育老师告诉你们,先跑 10 圈,然后开始今天课程。你们在跑步,他在数着1,2,3,4……。到了第 10 圈,吹一声哨子,大家停止跑步重新列队。

体育老师也烦了数数,问我能不能用程序解决。我问他知道循环结构吗?他说不就是跑圈吗,我回答他对了一部分,这种事情只要用上循环结构,就可以轻松的搞定。

于是我信手拈来写下两行代码

for x in range(0,10): print(f"第{x}圈")

这段代码就是帮你们体育老师数数,数到10圈时停止。

浅谈编程思维——循环结构

和生活场景唯一的区别就是,计算机计算从 0 开始。当然也可以修改为从 1 开始,这样停止数就是 11 了。

for x in range(1,11): print(f"第{x}圈")
浅谈编程思维——循环结构

以上演示用的网红编程语言Python,它有 range这个关键字, 明确告诉你这个循环是有范围的。

其他编程语言大多数是这样写的:

for(let i=0;i<10;i++){ console.log("第"+i+"圈"); }

作为编程思维系列,至于哪个语言怎么写,真的很不重要。重要的是,你明白关于重复的事情,你可以告诉计算机这样做。把精彩留给自己,把无聊和重复给机器。

上一段中的 range 确定范围是有边界。而失眠数羊本质是没有边界,因为你不知道数到什么时间才能睡着。这种事情编程中当然也可以做到。

浅谈编程思维——循环结构

先用我们日常思维,通过顺序结构描述这个事情:

失眠,睡不着

开始数羊

1只羊,2只羊,3只羊,4只羊,5只羊……

睡着了

就不数了

现在用程序表示

step=1; while step<86400: print(f"第{step}羊") if step==1800: print("睡着了……") break step=step+1 

解释一下这段代码,失眠让你很痛苦,打算对自己狠一点,数一夜的羊,然后你数着数,数到 1800 只时你睡着了。然后这个循环结束了。

你可能还有点疑惑,刚才不是说无边界吗?怎么还搞了一个 86400 呢?

不过也可以不搞 86400,改为这样

step=1 while True: print(f"第{step}羊") if step==1800: print("睡着了……") break step=step+1 

你本打算一直数下去,但数到 1800 的时间睡着了。注意到了吗?我们必须预设 1800,不然就真睡不着了,这样写就会成为死循环了。

为什么呢?不引出数字可以解决问题吗?

先给答案,不能。为什么呢?这就是人类思维和计算机区别,现在我们使用的计算机全名是「数字电子计算机」。它能处理全部要转换电子数字信号。而我们的大脑的信号要复杂的多,因而在数羊的循环中,睡眠系统唤醒后立马入睡。

浅谈编程思维——循环结构

简单解释一下数字信号。你可能已经注意到了,这里很重要的两个字是「数字」。在古代边关军队通过长城烽火台的狼烟来表示是否有敌人入侵。相隔几百里的山头,看到远处狼烟冒起,知道外敌入侵,需要马上该集结部队。这里的狼烟是一种信号,这种信号叫模拟信号。这个很好理解,用狼烟模拟了敌人入侵。模拟信号,小朋友也经常用,如果你多观察小孩子一起玩耍场景,他们经常会说「假装你是谁谁」,这个假装就是模拟信号。

模拟信号你一定清楚了,模拟信号有个缺点就是可以表达含义比较单一。比如狼烟起了,知道敌人来了。但不知道来了多少敌人,该如何的做决策。

于是某年某月,一个聪明是士兵,先发明一个烟罩,烟罩可以控制烟不冒起来。聪明的士兵还设置了一个规则,把狼烟生起后,用烟罩控制狼烟冒起的次数,一次表示少量敌人来犯,需要加强警惕;两次表示敌人有一定的数量,需要集结军队;三次以上表示很危急。

这样通过控制狼烟的次数就可以表达出好多含义,传达很多信息。这位聪明士兵方法,被将军采纳后,各个边关将军达成了共识, 用他们约定好的方式来传达情报。

说到这里,想必你已经清楚啥叫数字信号了。再引申一点,将军们达成的共识就是编程中各种协议。计算机数字信号就是通过电路开和关表示的,开表示1,关闭表示0。知道计算机的底层为啥是二进制了吧。

再回到循环结构中,一种是有明确的边界,本质就是重复的执行一种没有明确的边界,可以一直执行,但必须有个退出循环的时机,时机到了,这个循环得结束了。

这个世界上没有永恒的事物,我们经常说明天太阳照样从东边升起。但在宇宙学和数学上说太阳的寿命约为100亿年。100亿年后,太阳无法从东边升起,地球也不复存在了。循环也是,边界不明确的循环一般都有退出时机。如上面那个数羊的示例。也可以不设置边界,如果没有退出时机,那叫无限循环,或者是死循环。无限循环和死循环也会结束,它的结束大多是资源耗尽。例如太阳无限次升起,但等到太阳核聚变资源耗尽后,就不能再次升起了。

道理明白,来用循环思维解决一个实际问题。小学数学中鸡兔同笼。

浅谈编程思维——循环结构

有一些鸡和兔子被关在同一个笼子里,一共有10个头和26条腿,那么笼子中兔子和鸡各有几只?

这道题目美国数学课本推荐做法就是列表法:

鸡数量

兔数量

算式

腿数量

1

9

1*2+4*9

38

2

8

2*2+4*8

36

3

7

3*2+4*6

30

4

6

4*2+6*4

32

5

5

5*2+5*4

30

6

4

6*2+4*4

28

7

3

7*2+3*4

26

从鸡开始列举,列举到 7 就可以得到正确答案了。

如果同样的题目,数字调大一点,这样列举就不合适了。

例如题目换为《孙子算经》中另一道很经典的题目:

三轮车和四轮车的数量一共是33辆,有100个轮子,请问有多少辆四轮车,多少辆三轮车?

这个数字比较鸡兔大了 3 倍多,如果想上题一样列举计算不是不可以,而是花费的时间较长。但列举的思路可以写成程序,让计算机算。

#总数33,100个轮子 for x in range(0,33): y=x*3+(33-x)*4 if y==100: print(f"有{x}个三轮车,有{33-x}四轮车") break

程序很快得出结论:

有 32 个三轮车,有 1 个四轮车

看到答案,再想象一下,如果按照上题目,从三轮车开始列举,要从 1 列举到 32,好麻烦啊!但用循环,结合分支结构,再结合一点 3 年级的数学,搞定这个题目就这样轻而易举。

说到这里,想必你对循环结构一定了解的七二八分了。循环结构在编程中实在太重要了。

总结一下,循环结构就是在特定情况下通过重复和循环往复执行相同的动作,寻找到某个东西或者达到某个目的。注意了,循环结构一定要有退出机制,不然就是死循环了。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/170512.html

(0)
上一篇 2025-02-17 09:00
下一篇 2025-02-17 09:05

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信