Jestem nowy na tej stronie i to pytanie z pewnością nie jest na poziomie badawczym - ale no cóż. Mam małe doświadczenie w inżynierii oprogramowania i prawie żadnych w CSTheory, ale uważam to za atrakcyjne. Krótko mówiąc, chciałbym uzyskać bardziej szczegółową odpowiedź na poniższe pytania, jeśli to pytanie jest dopuszczalne na tej stronie.
Wiem więc, że każdy program rekurencyjny ma iteracyjny analog i rozumiem popularne wyjaśnienie, które jest dla niego oferowane, utrzymując coś podobnego do „stosu systemowego” i zmieniając ustawienia środowiska, takie jak adres zwrotny itp. Uważam, że jest to pewien problem .
Będąc nieco bardziej konkretnym, chciałbym (formalnie) zobaczyć, jak można udowodnić to stwierdzenie w przypadkach, gdy masz funkcję wywołującą łańcuch . Co więcej, jeśli istnieją jakieś instrukcje warunkowe, które mogą doprowadzić do wywołania ? Oznacza to, że wykres wywołania funkcji potencjalnej zawiera pewne silnie powiązane komponenty.F i
Chciałbym wiedzieć, jak poradzić sobie z tymi sytuacjami, powiedzmy jakiś konwerter rekurencyjny na iteracyjny. I czy opis, o którym wspominałem wcześniej, był naprawdę wystarczający dla tego problemu? Mam na myśli to, dlaczego w niektórych przypadkach usunięcie rekurencji jest dla mnie łatwe. W szczególności usunięcie rekurencji z przejścia drzewa binarnego w przedsprzedaży jest naprawdę łatwe - jest to standardowe pytanie do wywiadu, ale usunięcie rekurencji w przypadku zamówienia pocztowego zawsze było dla mnie koszmarem.
Naprawdę pytam o pytania
(1) Czy naprawdę istnieje bardziej formalny (przekonujący?) Dowód, że rekurencję można przekształcić w iterację?
(2) Jeśli ta teoria naprawdę istnieje, to dlaczego, na przykład, uważam , że na przykład iterowanie preorderów jest łatwiejsze, a postorder tak trudne? (inne niż moja ograniczona inteligencja)