自顶向下,逐步求精

大事化小,小事化了

(大误)

概览

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

起源

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

goto语句

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

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

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

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

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

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

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

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

判断x是否等于y,如果是则结果是x(或者y);
如果不是,则用二者之中较大者减去较小者,得到的差与二者较小者继续求gcd。

这样,问题就解决了。




话说回来,goto语句有什么不好了……关键时刻还是很靠谱的呀……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值