Блок-схема для двух рекурсивных функций

У меня есть две простые функции:

a)

drawRight(x){ // where x is integer
      if(x == 0 )
         draw();
      else{
         drawRight(x-1);
         doSomething();
         drawLeft(x-1);
      }
   }

б) (очень похоже на а))

drawLeft(x){ // where x is integer
      if(x == 0 )
         draw();
      else{
         drawRight(x-1);
         doSomething2();
         drawLeft(x-1);
      }
   }

Мой вопрос: возможно ли нарисовать блок-схему, если я вызову, например, drawRight(5)? Я сделал блок-схему только для самовызывающейся рекурсивной функции, но не могу найти решение для этой.

Любая помощь будет оценена по достоинству.


person kamilosdzikos    schedule 01.10.2015    source источник


Ответы (2)


Думаю, блок-схема будет выглядеть так. Я сделал это для drawRight(2), так как он очень быстро становится довольно большим.

Блок-схема

Фактический порядок терминальных вызовов тогда будет

  • рисовать
  • сделай что-нибудь
  • рисовать
  • сделай что-нибудь
  • рисовать
  • сделать что-то2
  • рисовать
person CollinD    schedule 01.10.2015
comment
Я не уверен, как правильно назвать на английском диаграмму, которая мне нужна, может быть, блок-схему. Мне нужно что-то вроде этого: prntscr.com/8mo9mz, и если это возможно, это будет работать для каждого 'n ' ценность - person kamilosdzikos; 01.10.2015

Рекурсивная функция обычно вызывается и обрабатывается с использованием стека в любом известном мне языке программирования. Блок-схема может не совсем следовать правилам языка программирования для запуска кода с рекурсивными функциями, но она показывает, как блок-схема может запускать рекурсивный фрагмент:

введите здесь описание изображения

Обратите внимание, что функции добавляются в стек в обратном порядке. Например, если drawRight вызывает drawRight, doSomething и drawLeft, они будут добавлены в стек как drawLeft, doSomething и drawRight. Таким образом, сначала будет вызываться drawRight, затем doSomething и, наконец, drawLeft. Казни произойдут, как и ожидалось.

Блок-схема будет иметь меньше проводов, если вместо условного элемента используется регистр.

person hpaknia    schedule 04.07.2021