Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Рекурсивный алгоритм


Автор: Shurman38 6.7.2007, 21:00
        n + 4,           if 1<=n<=10        
f(n){
        g(n-1)-n,      then
    

           2n,             if 1<=n<=10
g(n)={ 
           f(n-1)-1,     then


n=13

И ещё нужно отобразить содержимое stack при каждом вызове.


Как её решать?

Автор: Shurman38 7.7.2007, 16:16
Да, по ходу я не там, где надо тему запостил. Извиняюсь.
По идее мне нужна суть решения, в смысле язык програмирования не важен.
В следующий раз буду внимательней.

Автор: LSD 7.7.2007, 23:06
Модератор: флейм - удалил. Тема перемещена из Java: Общие вопросы

Автор: SoWa 7.7.2007, 23:40
Ну будет у тебя три разных итерации для 13 12 11, и 10 одинаковых, если у тебя n будет уменьшаться в ходе работы. Если я конечно правильно понял: если n в отрезке 0;10 то n +4. Если нет- то переходим к g. Так?

Автор: maxim1000 7.7.2007, 23:53
так а что, собственно, нужно сделать?
алгоритм вычисления функций тут уже написан
что касается стека, то тут уже зависит от того, на чём всё это будет реализовано
(даже на одном и том же языке для разных компиляторов, по идее, может получиться немного разное содержимое стека)

Автор: Shurman38 8.7.2007, 01:46
Чему равна f и ход решения. Я вообще не пойму, как эту рекурсию решать.
А содержание стэка не для какого-нить  языка конкретно, а просто обобщенно.

Автор: SoWa 8.7.2007, 05:53
Хехе, долго не понимаешь. 
Бери f и подставляй туда 13. Получишь переход к g уже в точке 12. Из g вернешься в f с точкой 11, с ней обратно в g и потом останутся на каждом шаге зависимости 2n. Берешь бумажку и считаешь.  smile 

Автор: Shurman38 8.7.2007, 14:18
Какие зависимости 2n? Можете подумать, что я тупой, но я ничего не могу понять.

Добавлено через 12 минут и 41 секунду
        n + 4,           if 1<=n<=10        
f(n){
        g(n-1)+n,      then
                  --

           2n,             if 1<=n<=10
g(n)={ 
           f(n-1)-1,     then


Найти f(13)

Неправильно условие написал.

Автор: Shurman38 8.7.2007, 14:46
f(13)=g(12)+13
        =f(11)-12+13
        =g(10)+11-12+13
        =f(9)-10+11-12+13
        =g(8)+9-10+11-12+13
        =f(7)-8+9-10+11-12+13
        =g(6)+7-8+9-10+11-12+13
        =f(5)-6+7-8+9-10+11-12+13
Дальше f(5) лежит в отрезке между 1 и 10, следовательно f(5) равна 5+4.
И того:5+4-6+7-8+9-10+11-12+13=19

А где 2n должна сработать? Или я неправильно посчитал?

Автор: maxim1000 8.7.2007, 17:43
Цитата(Shurman38 @  8.7.2007,  14:46 Найти цитируемый пост)
g(10)+11-12+13

уже тут нужно было использовать g(n)=2n, ведь 1<=n<=10

Автор: Shurman38 8.7.2007, 22:57
Это почему? 2n=2*10=20, а это уже не в отрезке 1<=n<=10.

Автор: maxim1000 9.7.2007, 12:07
так не 2n ведь надо проверять на вхождение в отрезок, а n

Автор: Shurman38 9.7.2007, 13:29
f(13)=g(12)+13
        =f(11)-12+13
        =g(10)+11-12+13
Дальше g(10) лежит в отрезке между 1 и 10, следовательно g(10) равна 2n=10*2=20.
Следовательно 20+11-12+13=32
А где должна n+4 сработать?

Автор: Artemios 9.7.2007, 13:54
Цитата(Shurman38 @  9.7.2007,  14:29 Найти цитируемый пост)
А где должна n+4 сработать? 

n+4 сработает, если будешь считать например f(12)

Автор: SoWa 9.7.2007, 20:38
Ты проверяешь первое условие, делаешь, а потом еще и второе. Зачем?

Автор: Shurman38 10.7.2007, 14:03
Всё, разобрался. Всем огромное спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)