MathCAD

       

Расчет чисел Аккермана


Есть более крепкий орешек – числа Аккермана, зависящие уже от двух переменных (см. рис. 6.13 с двойной рекурсией). В среде Mathcad числа Аккермана можно рассчитать только для значений аргументов m и n, находящихся недалеко от нулей («каботажное плавание»). Расчет, например, значения Akk(4, 6) через некоторое время аварийно прерывается – см. рис. 6.13. Рекурсия – это когда программист, сокращая текст программы, перекладывает свои проблемы на плечи машины, которой приходится генерировать длинный ряд новых локальных переменных. Отсюда и сбои. Выход из положения – замена рекурсии на рекуррентность (цикл), что автор и предлагает сделать читателям по отношению к числам Аккермана.

Для закрепления темы рекурсии приводим текст BASIC-программы, решающей известную головоломку «Ханойские башни»[28]

(рис. 6.14):

DefInt N

DefStr X-Z

Declare Sub PUTDISK (N%, X$, Y$, Z$)

Input "Число дисков в пирамиде"; N0

            PUTDISK N0, "A", "B", "C"

End

Sub PUTDISK (N%, X$, Y$, Z$)

DefInt N

DefStr X-Z

If N = 1 Then

                        Print X; "-"; Z

            Else

                        PUTDISK N - 1, X, Z, Y

                        Print X; "-"; Z

                        PUTDISK N - 1, Y, X, Z

            End If

End Sub



Содержание раздела