本文来源于公众号:勾勾的Java宇宙(微信号:Javagogo),莫得推广,全是干货!
原文链接:mp.weixin.qq.com/s/50Nzr0rAd… 作者:林䭽
可不可以构造一段程序证明停机问题无解? 如果可以,请用自己熟悉的语言写出这段程序。
【解析】
这是一个问题,拿到这道题,先从问题的抽象入手。
-
判断一段程序是否会停机的方法可以抽象成一个函数。
-
一段程序,也可以抽象成一个函数。
因此,问题可以转换为——
存不存在一个通用函数判断另一个函数是否会停止?
接下来,构造冲突。
假设存在一个函数 willStop
,它只有一个参数 func
,willStop
可以判断任意函数 func
是否会停止:
-
如果会停止,返回
true
; -
如果不会停止返回
false
。
willStop
具体如何实现我们无法给出,这里只是做一个假设。
func willStop(func){
//...
}
下面我们构造一组冲突,构造一个叫作 wrappedWillStop
的函数,它调用 willStop
构造冲突。
function wrappedWillStop(){
if( willStop(wrappedWillStop) ) {
while(true){}
} else {
return
}
}
wrappedWillStop()
wrapped
版本构造冲突方法如下:
调用 willStop
并把自己传进去。如果 willStop
认为 wrapped
会停止,那么就执行一个死循环。 如果 willStop
认为 wrapped
不会停止,就直接返回。
通过上述的方法,我们就知道 willStop
这样的函数肯定是无法被实现的。
也就是停机问题无解。
欢迎大佬们关注公众号 勾勾的Java宇宙(微信号:Javagogo),拒绝水文,收获干货!