(04-10-2020, 09:54 PM)Gekoo 提到: 还在高中,没有系统学习计算机科学的前信息学竞赛选手说一下自己的思路。
我曾经在loj做过一道类似的题目,程序输出源代码本身,这是我的代码。
代码:#include <cstdio>
int main() {
FILE* out = std::fopen(__FILE__, "r");
char ch;
while ((ch = std::fgetc(out)) != EOF) {
std::putchar(ch);
}
return 0;
}
它利用了编译器__FILE__这个宏定义,表示代码文件名。运行这个程序A,它会打印源代码本身。
那么如果我们再写一个程序B,来控制它,运行程序A,输出到新的代码文件并编译,每新建了新的可执行文件就运行它,并用新的线程来控制它,重复这个过程,如果算力是理想化的,是否可以达成无限自我复制?
我是个半吊子,没研究过病毒,不太懂真实的程序是怎么复制的orz(我猜肯定不会复制源代码)。就复制源代码自身而言,你的程序是可行的,只是不能移植到自我复制机器上。(本质上是编译后的程序复制源代码,不是自己复制自己)
又,好像有人做出了自我复制的分子机器,参见Zykov et al., Self-reproducing Machines, 2005
程序方面还有个自我复制神经网络,因为看不懂,我就没看 Oscar Chang, Hod Lipson, Neural Network Quine, 2018
如果回我了我没反应,可以私聊提醒我一下。