证明了这一点:
使用go或类似设计的每个算法 A 等同于不使用go的另一算法 B 。
换句话说,:
使用go设计的每个算法,都可以不用设计去设计。
如何证明?
答案 0 :(得分:18)
℃。 Böhm,G。Jacopini,“流程图,图灵机和只有两种形成规则的语言”,Comm。 ACM,9(5):366-371,1966。
http://en.wikipedia.org/wiki/Structured_program_theorem
http://en.wikipedia.org/wiki/P"
Böhm-Jacopini证明描述了如何从任意图表构造结构化流程图,使用额外整数变量中的位来跟踪原始程序由程序位置表示的信息。这种结构基于Böhm的编程语言P''。 Böhm-Jacopini证明并没有解决是否采用结构化编程进行软件开发的问题,部分原因是这种结构更可能掩盖程序而不是改进程序。相反,它标志着辩论的开始。埃德斯·迪克斯特拉(Edsger Dijkstra)的着名信件“Go To Statement were Armful”,随后于1968年出现。该定理的后续证明解决了Böhm-Jacopini证据的实际缺点,其结构保持或提高了原始程序的清晰度。1 < / p>
答案 1 :(得分:-2)
每个计算机程序都可以在没有分支的情况下表达。你需要一个无限长的程序,但它可以完成。 (你仍然需要一个if语句)我想这就是你得到正式证明的地方。 http://www.jucs.org/jucs_2_11/conditional_branching_is_not/Rojas_R.html
此外,您可以将GoTo的任何代码块分离出来并放置在状态机或重复循环中。如果您使用随机(和重叠的goto语句)填充的代码块,则可以将每个goto点分配给特定函数,并且可以使用function_exit和下一个状态的赋值替换每个Goto。
所以
Point1:
do something
Point2:
do something
if blah goto point3
goto point4
point3:
something
point4:
goto point2:
end
can be replaced by
function point1
do something
return = point2
end_function
function point2
do something
if blah return = point3
return = point4
end_function
function point3
something
return = point4
end_function
function point4
return = point2
end_function
state = point1
repeat
state = call_function (state)
until (state=end)
这完全模仿goto而不使用goto,因此,我会回答 - 是的。
我不确定转到goto-point可以作为变量的地方。