还在高中,没有系统学习计算机科学的前信息学竞赛选手说一下自己的思路。
我曾经在loj做过一道类似的题目,程序输出源代码本身,这是我的代码。
它利用了编译器__FILE__这个宏定义,表示代码文件名。运行这个程序A,它会打印源代码本身。
那么如果我们再写一个程序B,来控制它,运行程序A,输出到新的代码文件并编译,每新建了新的可执行文件就运行它,并用新的线程来控制它,重复这个过程,如果算力是理想化的,是否可以达成无限自我复制?
我曾经在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,输出到新的代码文件并编译,每新建了新的可执行文件就运行它,并用新的线程来控制它,重复这个过程,如果算力是理想化的,是否可以达成无限自我复制?