转到,不要去!证明:

时间:2010-03-24 07:14:50

标签: algorithm

证明了这一点:

使用go或类似设计的每个算法 A 等同于不使用go的另一算法 B

换句话说,

使用go设计的每个算法,都可以不用设计去设计。

如何证明?

2 个答案:

答案 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可以作为变量的地方。

相关问题