|
186 |
Rozdział 6. Derekursywacja | |
|
D(x); |
while((N!=i)44(N%2>) | |
|
) |
l N-N/2; C (x) ; | |
|
if(N==l) goto koniec? N=N+1; B {x) ; |
}while(p!=1)i
)
Dla zilustrowania metody rozważmy jeszcze raz problem wież Hanoi, przedstawiony na stronie 170.
Mając do dyspozycji metodę funkcji przeciwnych (patrz §6.5) łatwo dojdziemy do następującej wersji zaproponowanej tam procedury:
luwoijt.cpp I
void hanoi()
<
if (n!=1)
I
n—; b=3-a-b; hanoi();
n4 + ; b-3-a-b;
cout << "Frzesuh dysk nr ”<<n<< ” z ” << a << " na "«b<<endl; n--; a=3-a-b; hanoi () ; n++; a=3-a-b;
I
else
cout << "Przesuń dysk nr ”<<n<< " z " << a « " na " <■< b << endl; t
Zauważmy, żc instrukcje n++ i n— anulują się wzajemnie, mogą być zatem po prostu usunięte.
Jeśli poddamy procedurę hanoi przeróbce na wersję iteracyjną, powinniśmy otrzymać:
void hanoi_iter()
I
int M=l; do