Я новачок на цьому веб-сайті, і це питання, безумовно, не є дослідницьким рівнем - але добре. У мене мало досвіду в інженерії програмного забезпечення і майже немає в CSTheory, але я вважаю це привабливим. Щоб коротко розповісти, я хотів би отримати більш детальну відповідь на наступне, якщо це питання прийнятне на цьому веб-сайті.
Отже, я знаю, що кожна рекурсивна програма має ітеративний аналог, і я начебто розумію популярне пояснення, яке пропонується для неї, підтримуючи щось подібне до "системного стеку" та натискаючи на налаштування середовища, наприклад, зворотну адресу тощо. .
Будучи трохи більш конкретним, я хотів би (формально) побачити, як можна довести це твердження у випадках, коли у вас функція викликає ланцюг . Далі, що робити, якщо є якісь умовні висловлювання, які можуть призвести до того, що може зателефонувати на якийсь ? Тобто графік виклику потенційної функції має деякі сильно пов'язані компоненти.F i F j
Мені хотілося б знати, як можна вирішити ці ситуації, скажімо, якийсь рекурсивний до ітеративного перетворювача. А хіба рукохвильовий опис, про який я згадував раніше, справді достатньо для цієї проблеми? Я маю на увазі, чому тоді я вважаю, що видалити рекурсію в деяких випадках легко. Зокрема, видалити рекурсію з обходу бінарного дерева попереднього замовлення дуже просто - його стандартне запитання про інтерв'ю, але видалення рекурсії у випадку після замовлення завжди було для мене кошмаром.
Що я насправді задаю - це питання
(1) Чи дійсно є більш формальне (переконливе?) Доказ того, що рекурсія може бути перетворена на ітерацію?
(2) Якщо ця теорія справді існує там, то чому я вважаю, що, наприклад, ітератизація попереднього замовлення легше, а після замовлення так важко? (крім мого обмеженого інтелекту)