amarao: (Default)
[personal profile] amarao

Функция выглядит как вычислимая примитивно-рекурсивная, но на самом деле невычислимая общерекурсивная!

Доказательство

def foo(i):
    if i < 0 or i > 10:
        return i
    try:
        print(f"{i} - 1")
        return foo(i-1)
    finally:
        print(f"{i} + 1")
        return foo(i+1)

print(foo(5))

На самом деле эта функция - чистое UB в питоне. После долгих лет рассказа о том, что в питоне нет UB.

Вот более интересный генератор последовательностей на той же базе.

def foo(i):
    if i < 0 or i > 10:
        return i
    print(i, end='', sep='')
    try:
        return foo(i-1)
    finally:
        return foo(i+1)

print(foo(5))

Чем не генератор случайных чисел?

Date: 2022-07-20 05:42 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Ну кек бы условие «базы рекурсии» поменялось — было < 0, стало < 1. Теперь такая же нетерминированная рекурсия между foo(2) и foo(1) с заходом в foo(0) (которого не видно, потому что он возвращает 0 без print’а).

Profile

amarao: (Default)
amarao

February 2026

S M T W T F S
123456 7
8910111213 14
15161718192021
22232425262728

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 25th, 2026 01:13 pm
Powered by Dreamwidth Studios