循环

✍ dations ◷ 2024-12-22 21:52:54 #循环
循环是计算机科学运算领域的用语,也是一种常见的控制流程。循环是一段在程序中只出现一次,但可能会连续运行多次的代码。循环中的代码会运行特定的次数,或者是运行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都运行一次。在一些函数编程语言(例如Haskell和Scheme)中会使用递归或不动点组合子来达到循环的效果,其中尾部递归是一种特别的递归,很容易转换为迭代。大部分编程语言都提供循环的指令,可以依指定的次数重复运行一段程序。若指定的次数N小于1,编程语言会忽略整个循环不去运行,若指定的次数N为1,则循环只会运行一次。在循环进行时,循环计数器也会随着变化,大部分的编程语言可以允许循环计数器上数或是下数,每次的变化量可以是1或是其他不为0的数值。在许多编程语言中,循环计数器要使用整数才能得到准确的结果。由于硬件的限制,在循环计数器使用浮点数时,结果可能会不符预期,如以下的循环依其四舍五入的误差、硬件及编译器的差异,不一定会运行10次,可能只会运行9次。而且X的数值可能会有些误差,不是预期的0.1, 0.2, 0.3, ..., 1.0。大多数的编程语言都有指令,可以在特定条件成立时继续循环的进行,或是特定条件不成立时继续循环的进行,进行到特定条件成立为止。前者一般会标示while,后者一般会标示until。其判断条件可能在循环一开始就进行,或是在循环最后才进行。前者的循环不一定会运行,而后者1的循环至少会运行一次。许多编程语言支持一种特别的循环,可以针对一个数组中的元素或是一个集合中的所有成员进行循环中的指令,包括Ada、D语言、Smalltalk、Perl、Java、C#、Visual Basic、Ruby、Python、JavaScript、Fortran 95等编程语言都有这类的循环结构:有些编程语言有泛用循环结构,可以用来表示指定次数或指定条件的循环,像C语言的for指令或是Common Lisp语言中的do指令都是这类的例子,不过为了程序的可读性考量,在这些编程语言中还是尽量使用一些含义较明确的指令(如while指令)。死循环一般会用在有一段程序需要永远运行,或是该程序在没有发生特殊事件(如故障)时需要永远运行的场合,例如一个事件驱动的程序需要持续运行循环,处理发生的事件,直到用户结束或中断程序为止。若在指定条件的循环中,其判断条件用到的变量数值永远不会改变,这种程序错误也会使得此循环变成死循环。当使用指定次数的循环查表时,会希望在查到需要的数据时就可以直接结束循环的进行,有些编程语言可以用break或exit的指令达到这様的功能,这些指令会结束这个循环,接着会运行循环后面的指令。若此循环在副程序中,也可以用return中断循环的进行, 同时离开副程序。以下是Ada编程语言的一个示例,利用exit ... when...的方式中提早结束循环。Python支持一个特别的条件判断式,可以根据最近使用循环是否曾用break提早结束而做不同的处理,举例如下:上例中的else子句是for循环的一部分,不是内层if区块的一部分。Python语言的for循环及while 循环都支持else子句,当循环没有用break提早结束时就会运行。有时在使用循环的程序中会希望在特定情形下跳过当前循环区块的指令,回到循环开始运行下一个循环,一般这类的指令会命名为continue、skip或next,其效果是提早结束这次循环的进行,继续进行下一个循环,若此循环已经是最后一次运行,这类指令会结束循环的进行,继续进行后续的指令。像Perl及Ruby等编程语言有redo指令,可以重新运行当前的循环,若在指定次数的循环中,其循环计数器的数值不会变化。Ruby编程语言有retry指令,可以让循环计数器回到初值,重新运行整个循环。循环变量(英语:Loop variant)及循环不变量是判断循环正确性的工具。循环变量是一个初值不为负的整数表示式,在每次运行循环时循环变量的数值需减少,但在正常的循环运行过程中循环变量的数值不会变成负值。循环变量用来确保循环会结束。循环不变量是一个和循环有关的判断式,在第一次进入循环之前,循环不变量的值需为真,在后续每一次运行循环时,其值也要为真。当循环正确的结束时,其终止条件和循环不变量都会成立。循环不变量可用来监控在循环进行时,某一指定性质的状态。像是Eiffel之类的编程语言本身就有支持循环变量及循环不变量,其他语言可能需要有附加组件才能支持此功能,例如Java就需要配合Java建模语言(英语:Java Modeling Language)规范的loop statements才能支持此机能。

相关

  • 致命创伤致命创伤也称为致命伤,是非常严重,直接导致死亡的创伤,创伤多半会指穿透伤或撕裂伤,创伤的原因可能是意外,或是有意造成的伤害(杀人或是自杀),死亡不一定会和致命创伤同时出现,但会在
  • 安全性行为安全性行为是指一套为保持人们身心健康的性行为作法而做出的设计,狭义的指减低性病感染风险的性行为;广义的安全性行为除此之外,还包括对进行性行为的人的心理状况、进行性行为
  • 镶嵌镶嵌现象是指从单一受精卵发育而成的同一个体的细胞有不同的遗传组成、染色体结构或染色体数目的现象。镶嵌现象可以和嵌合体相对比,在嵌合体的胚胎发育早期,多个受精卵相融合
  • 汉音陶文 ‧ 甲骨文 ‧ 金文 ‧ 古文 ‧ 石鼓文籀文 ‧ 鸟虫书 ‧ 篆书(大篆 ‧  小篆)隶书 ‧ 楷书 ‧ 行书 ‧ 草书漆书 ‧  书法 ‧ 飞白书笔画 ‧ 
  • 泰奥多尔·施旺泰奥多尔·施旺(德语:Theodor Schwann,1810年12月7日-1882年1月11日),德国动物学家。他在生物领域贡献巨大,包括发展了细胞学说,施旺细胞的发现和对胃蛋白酶的发现与研究。更进一步
  • 质膜细胞膜,又称原生质膜(英语:cell membrane 或 plasma membrane 或 cytoplasmic membrane),为细胞结构中分隔细胞内、外不同介质和组成成分的界面。原生质膜普遍认为由磷脂质双层分
  • 塔林塔林(爱沙尼亚语:Tallinn)是波罗的海最内部的芬兰湾滨的爱沙尼亚共和国的首都。旧称列巴尔(德语、丹麦语: Reval),沙俄时代名为列威利(Ревель),前苏联时代名为塔林(Таллин
  • 丹尼尔·那森斯丹尼尔·那森斯(Daniel Nathans,1928年10月30日-1999年11月16日)是一位美国分子生物学家。出生于美国德拉瓦州威尔明顿,其父母为俄罗斯犹太移民。那森斯于1954年获得圣路易斯华盛
  • 丙酮酸激酶丙酮酸激酶(英语:Pyruvate kinase,EC 2.7.1.40)是糖酵解过程中的一类酶,催化磷酸基团从磷酸烯醇式丙酮酸(PEP)转移到ADP的反应,生成一分子丙酮酸和一分子ATP.丙酮酸激酶所催化的反应
  • 布赖顿坐标:50°50′35″N 0°07′53″W / 50.842941°N 0.1313120°W / 50.842941; -0.1313120布莱顿(英语:Brighton),英国英格兰东南部东萨塞克斯郡布莱顿-霍夫的海滨城镇,北距伦敦47