您的位置:首页 > 其它

自顶向下,逐步求精

2017-12-01 11:10 323 查看
大事化小,小事化了

[align=right](大误)[/align]

概览

说白了,这个思想就有点像Top-down:将一个大问题分割为若干个小块,然后将小块再分割为更小的小块。力求每个小块都完美地解决。当所有的小块都精致地解决了之后,大问题也随之解决。

起源

该编程思想与模块化设计与结构化设计有着密切关系。大问题分解出的小问题可以被看作是一个个的模块;而“自顶向下,逐步求精”的思想是结构化设计的一个重要原则。

goto语句

结构化设计的起源是对goto语句的争论。20世纪60年代,结构化编程起步,期间Dijkstra(对,就是那个Dijkstra)发表了经典论文《goto语句有害论》。随后结构化设计逐渐变得流行,也就出现了“自顶向下,逐步求精”的思想。

自顶而下与自下而上的区别

听到名字就可以知道它们的最大的区别:一个是自下而上,另一个反之。

在思想上它们也有区别:自下而上的编程是先详细制造好小模块,最后将小模块连接起来形成大系统;而自上而下确是为了解决大系统问题,将大的系统分割成小块。

示例:求多个数的最大公约数

首先将问题分解成两个步骤:求两个数的最大公约数;从头两个数开始求最大公约数,然后将求得的最大公约数与后面的数一起求最大公约数,直到结束。

第二部分的阐释足够明确,可以很轻易解决;现在解决第一部分。

根据辗转相减法,当x大于y时,gcd(x, y) = gcd(x, x - y)。因此可以递归解决问题:

判断x是否等于y,如果是则结果是x(或者y);

如果不是,则用二者之中较大者减去较小者,得到的差与二者较小者继续求gcd。

这样,问题就解决了。

[align=right]话说回来,goto语句有什么不好了……关键时刻还是很靠谱的呀……[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: