“算法被定义为一个有限的操作序列,其执行将完成具有此定义的特定任务”。我们可以说任何语法和语义上正确的C程序也是一种算法吗?
我的回答是正确的,但我的教授说答案是假的,我的封锁也是如此。 他们使用的反例是
while(1) {
}
和
printf("%s","blahblah");
无限循环在语义上不正确,而printf()完成任务,因此它是一种算法。因为你可以使用循环和putchar()而不是printf();
那么你们认为谁是对的?
答案 0 :(得分:5)
你告诉你的教授,如果他甚至不知道正确的术语,他最好停止分裂头发(所以从这一点来看,他的问题没有意义,但无论如何......)。
“算法”在概念上与程序不同。 <答案
任何语义正确且语法正确的C程序是算法吗?
是不,,因为程序与算法不同 - 程序是......程序。 算法是语言无关的问题解决方案的特定表现形式(即,它可以以非常通用的方式表述)。程序是一种依赖于语言的具体实现算法(在C语言中,由于“as-if”规则和编译器优化,实际上不需要与算法相同,它是只需要模仿它。)
还有一条评论:
无限循环在语义上不正确
嗯,确实如此。当然,人们并不是简单地解决暂停问题,但这并不意味着无限循环会“语义错误”。当程序执行除您期望之外的其他操作时,语义上是不正确的。除非您希望自己的程序在写while (1) { }
时执行其他操作而不是挂起,否则没有问题。
无限循环的概念是否被视为算法是另一个问题。通常,永远不会终止的指令序列不被认为是算法,而这可能就是您的教授所说的。根据{{3}}:
更准确地说,算法是一种有效的方法,表示为用于计算函数的定义良好的指令的有限列表。
(强调我的)