Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Найти значение функции F(F(N+11)) без применения рекурсии

65K
10 января 2011 года
SP_RS
3 / / 26.12.2010
F={F(F(N+11)),N<=100;
N-10,N>100}
причем понятно что рекурсией это решилось за 3 минуты обмозгования
заранее спасибо
1.8K
10 января 2011 года
LM(AL/M)
332 / / 20.12.2005
попробуем вычислить F(0), получим такую картинку:
Код:
F(0) = F(F(11)) = F(F(F(22))) =
    ...
 = F(F(F...F(F(110))...))
           &#9474; &#9492;&#9472;&#9472;&#9516;&#9472;&#9496;
           &#9474;    &#9474; [color=blue]>100[/color]
           v    v
           F( 100 )
           &#9492;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9496;
               &#9474;  [color=darkred]&#8804;100[/color]
               v
            F(F(111))
              &#9492;&#9472;&#9472;&#9516;&#9472;&#9496;
                 &#9474; [color=blue]>100[/color]
                 v
                101
            &#9492;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9496;
                &#9474; [color=blue]>100[/color]
                v
                91
               ...

на каждом шаге функция представима в виде цепочки F(F(F(F(...)))) причем значение аргумента &#8804;100 приводит к удлинению цепочки на 1 элемент, а >100 -- к укорочению на 1.
Отсюда -- итеративная реализация:
 
Код:
depth = 1
    while depth > 0:
        if N > 100:
            depth -= 1
            N -= 10
        else:
            depth += 1
            N += 11

    return N

проверил сравнивая значения итеративной и рекурсивной версии для N &#8712; {0 … 200}, так что все верно
65K
10 января 2011 года
SP_RS
3 / / 26.12.2010
спасибо, неожиданно простое решение
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог