ALG0

ALG0



180


Rozdział 6. Derekursymijii 6.6,

void main()

(

for (int i=0; i<17;i++) (Pl(i,b); cout « b << "    (

cout << endl;

for (i=C; i<17;i++)

i a-i; P2(); cout << b << "    )

)

Oto co ukaże się na ekranie:

2 4 7 11 16 22 29 37 46 56 67 79 92 106 121 137 2 4 7 11 16 22 29 37 46 56 67 79 92 106 121 137

Wszelkie znaki na ekranie i papierze wskazują, iż procedury PI i P2 są równoważne...

6.6. Klasyczne schematy derekursywacji

Poznane wcześniej metody eliminacji zmiennych lokalnych z procedur, jak również ich „deparametryzacja” służyły jednemu istotnemu celowi: jak największemu zbli- 1 żcniu sposobu wykonywania procedur rekurencyjnych do typowego programu ite- I racyjnego. W istocie, czym jest program określany jako „iteracyjny”? Termin ten I dotyczy zasadniczo systematycznego powtarzania pewnych fragmentów kodu, np. I przy pomocy instrukcji for. while, do... while.. Wywołanie rekurencyjne ma wiele wspólnego z iteracyjnym sposobem wykonywania programów pod względem ide- I owym (chodzi o systematyczne powtarzanie pewnych czynności), bardzo niewiele I jednak ma z nim wspólnego praktycznie. Iteracje są zwykłymi instrukcjami goto15 I przeplatanymi badaniem warunków. Wywołania rekurencyjne natomiast znajdują [ się co najmniej o poziom" wyżej. Poprzez usunięcie zmiennych lokalnych i para- I metrów' funkcji przybliżyliśmy je bardzo do schematu ileracyjnego.

Procedury rekurencyjne posiadają obowiązkowo pewne testy' służące do sprowa- I dzania procesu wywołań rekurencyjnych do tzw. przypadków elementarnych1'.

Przykładowo, obliczając rekureneyjnie silnię z n ciągle, badamy czy' n jest równe zeru. Jeśli odpowiedź brzmi tak, procedura zwraca wartość / — w przypadku I zaś przeciwnym następuje kolejne wywołanie rekurencyjne. Są to dwie różne rzeczy-dwa różne fragmenty kodu wykonywane w zależności od spełnienia lub nie pewnych warunków. Iteracje natomiast, generalnie rzecz ujmując,

10    W rozmaitych wariacjach zależnych od zestawu instrukcji procesora.

11    Abstrakcji, skomplikowania...

12    Jest to wymuszone naturalną chęcią zakończenia kiedyś szeregu wywołań rekurencyjnych!


Wyszukiwarka

Podobne podstrony:
class Punkt { Jak to działa? p! Punkt x 4 y 2 pl.x, pl.y);{ static void Main(string[] args){ Punkt p
ALG3 5.1 Listy jednokierunkowe 113 int wzor(int x,int(*fun)(int!) [ return fun(x); ) void main(} i
5 void main(void) f int dana = 8; int wynik - 1; for (int i = 1; i <= dana; i++){ wynik *= i; pri
Przykład C) Wskaźnik na pierwszą 3-elementową tablicę (pierwszą z dwóch) void main() { int
DSC00398 (21) #include <conio.h> void main O {int T_i[5]; float T_f[5]; int *Ws
// Program04.java public class Program04 { public static void main(String[]{ // zamiana dwóch zmienn
co to jest zmienna? // Program03.java public class Program03 { public static void main(String[] args
82959 Zdjęcie0008 (5) Przykład: #include <iostream.h> //++i, i++ #include <conio.h> void
zdj0 (6) vo±d BubbleSort(int *tab){ i<n; i++) for (int i=l for (int j=n-l; j>i; j Wykład
PB070015 #include <stdio.h> #include <stdlib.łp void main(void) ^ILE *f; int
68814 Slajd6 (26) Numerical integration static long num_rects = 100000; void main () { int i; d
ALG5 4.2. Sortowanie bąbelkowe, algorytm klasy 0(H2) 85 for (int j-n-l;j>i;j—) if (tab[j]<tab

więcej podobnych podstron