Теорема о рекурсии — различия между версиями
м |
м |
||
| Строка 10: | Строка 10: | ||
<code><font size = "3em"> | <code><font size = "3em"> | ||
| − | + | r(y){ | |
| − | + | V(x,y); | |
| − | + | ||
| − | + | main() { | |
| − | + | return V(getSrc(), y) | |
| − | + | } | |
| − | + | ||
| − | + | string getSrc() { | |
| − | + | string tmp = getOtherSrc(); | |
| − | + | return (tmp + "string getOtherSrc() {" + "\n" + "return" + tmp + "\n" + "}"; | |
| − | + | } | |
| − | + | ||
| − | + | string getOtherSrc() { | |
| − | + | return /* весь код до функции getOtherSrc() */ | |
| − | + | } | |
| − | + | } | |
</font></code> | </font></code> | ||
}} | }} | ||
Версия 07:31, 9 декабря 2010
Эта статья находится в разработке!
Теорема о рекурсии
Говоря неформально, теорема о рекурсии позволяет утверждать, что любая программа может использовать внутри себя свой исходный код (номер), который ей передали в качестве параметра.
| Теорема (О рекурсии): |
Для вычислимой функции от двух аргументов вычислимая функция |
| Доказательство: |
|
Пусть - любая вычислимая функция. Напишем программу для r(y).
r(y){
V(x,y);
main() {
return V(getSrc(), y)
}
string getSrc() {
string tmp = getOtherSrc();
return (tmp + "string getOtherSrc() {" + "\n" + "return" + tmp + "\n" + "}";
}
string getOtherSrc() {
return /* весь код до функции getOtherSrc() */
}
}
|
Замечание: программа r(y) печатает свой текст. Она написана в соответствии со следующей неформальной инструкцией:
Напечатать два раза, второй раз в кавычках, такой текст: "Напечатать два раза, второй раз в кавычках, такой текст:"
Источники
Н. К. Верещагин, А. Шень. Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. -- М.: МЦНМО, 1999