递归定理——输出自身源代码的程序

递归定理的一个重要推论,便是对于任意一个程序(图灵机),其都可以在内部获得自身的表述。用程序设计的语言:任意一个程序,都能够在程序内部的某个部分获得自身的源代码。

递归定理的定理内容:咕着

根据递归定理的内容,下面的python程序展示了:如何在任意程序的内部某个部分获取自己的源代码:

1
2
3
4
5
6
7
8
9
10
11
# 代码段A

d, n, s, A = chr(35), chr(10), chr(39)*3, '''print("{} 代码段A{}{}d, n, s, A = chr(35), chr(10), chr(39)*3, {}{}{}".format(d, n, n, s, A, s))
print(A)
print("{} 代码段B".format(d))
'''
print("{} 代码段A{}{}d, n, s, A = chr(35), chr(10), chr(39)*3, {}{}{}".format(d, n, n, s, A, s))
print(A)
print("{} 代码段B".format(d))

# 代码段B

上述python程序的输出是其自身的源代码:

1
2
3
4
5
6
7
8
9
10
11
# 代码段A

d, n, s, A = chr(35), chr(10), chr(39)*3, '''print("{} 代码段A{}{}d, n, s, A = chr(35), chr(10), chr(39)*3, {}{}{}".format(d, n, n, s, A, s))
print(A)
print("{} 代码段B".format(d))
'''
print("{} 代码段A{}{}d, n, s, A = chr(35), chr(10), chr(39)*3, {}{}{}".format(d, n, n, s, A, s))
print(A)
print("{} 代码段B".format(d))

# 代码段B

为了处理井号、引号与换行符的转义问题,此处将对应字符的ascii码存入对应变量,在print过程中输出对应字符变量来实现。

递归定理——输出自身源代码的程序

http://spiritedawaycn.github.io/2020/11/24/Recusive-Theorem/

作者

SpiritedAwayCN

发布于

2020-11-24

更新于

2020-12-14

许可协议