схема алгоритма - PullRequest
       10

схема алгоритма

1 голос
/ 17 мая 2010

Это максимальная схема алгоритма поиска: альтернативный текст http://img -photo.apps.zing.vn / upload / original / 2010/05/17/17 / 1274093752543903925_574_574.jpg

Итак, мне интересно, как можно нарисовать диаграмму для программы HaNoi Tower :

package tunl; 

public class TowersApp {
    static int n = 3;

    public static void main(String[] args) {
        TowersApp.doTowers(3, 'A', 'B', 'C');
    }

    public static void doTowers(int n, char from, char inter, char to) {
        if (n == 1) {
            System.out.println("disk 1 from  "+ from + "  to  " + to);
        } else {
            doTowers(n-1, from, to, inter);
            System.out.println("disk  " + n + "  from  " + from + "  to  " + to);
            doTowers(n-1, inter, from, to);
        }
    }
}

Я не могу нарисовать это. Любой может помочь мне !!!

Ответы [ 2 ]

2 голосов
/ 17 мая 2010

Ваша проблема в том, что алгоритм рекурсивный.Один из вариантов - перевести его в итерационный алгоритм с явным стеком.Но это теряет часть высокоуровневой структуры алгоритма.Было бы неплохо показать рекурсивную структуру.

Мне неизвестна стандартная идиома блок-схемы для рекурсии, но я бы нарисовал базовый алгоритм в виде блок-схемы и поставил вокруг него рамку сто же имя, которое используется в вызовах.Поскольку вызовы имеют немного отличающиеся параметры от родительского вызова, вы можете назначить их новым переменным, которые затем передаются как параметры.Сам вызов может быть помечен как «CALL doTowers» или аналогичным.

1 голос
/ 17 мая 2010

Рекурсивные реализации не могут быть смоделированы непосредственно этим типом блок-схемы. 1) Одним из решений было бы переписать алгоритм, чтобы он не был рекурсивным, и затем нарисовать диаграмму.признать, что это не очень удовлетворительно.


1) Ну, технически они могут , но они больше не полезны, потому что они больше не представляют поток управления и стек данных , подразумеваемый рекурсивным вызовом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...