Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
Özyineleme(Recursion)
Kendini doğrudan veya dolaylı olarak çağıran fonksiyonlara özyineli (recursive) fonksiyonlar adı verilir . Fonksiyonlar kendi kendilerini çağırabilecekleri gibi (direct recursion), çağırdıkları bir fonksiyon tarafından da çağrılabilirler (indirect recursion). Özyineli algoritmalar hemgüçlü algoritmalardır, hem de karmaşık yapıları daha rahat açıklayabilirler. Iterative algoritma döngü yapısını kullanır. Özyineleme algoritması dallanma (branching) algoritmasını kullanır. Fonksiyon özyineli olarak her çağrılışında yerel değişkenler ve parametreler için bellekte yer ayrılır. Her özyinelemeli olarak tanımlanmış problemin iterative çözümüne geçiş yapılabilir.
2
Bileşenler Temel durum Rekürsif tanımlama
Temel duruma indirme mekanizması
3
Tekil(Unary) Özyineleme
function RecursiveFunction ( <parameter(s)> ) { if ( base case ) then return base value else return RecursiveFunction ( <expression> ) } Örnek: Faktoriyel: int factorial ( int n ) if ( n <= 1 ) return 1; return n*factorial(n-1);
4
Example: Factorial Factorial(4) 4 Factorial(3) 3 Factorial(2) 2
1
5
Example: Factorial Factorial(4) 4 Factorial(3) 3 Factorial(2) 2
1
6
Example: Factorial Factorial(4) 4 Factorial(3) 3 Factorial(2) 2
1
7
Example: Factorial Factorial(4) 4 Factorial(3) 3 2
8
Example: Factorial Factorial(4) 4 Factorial(3) 3 2
9
Example: Factorial Factorial(4) 4 6
10
Example: Factorial Factorial(4) 4 6
11
Example: Factorial 24
12
İkili(Binary) Özyineleme
Kendi kendine iki veya daha fazla cagri vardır. Ornek – Fibonacci Bir sayilar serisi 0 ve 1 ile baslar. Sonra gelen hersayi kendinden onceki iki sayinin toplami 0, 1, 1, 2, 3, 5, 8, 13, 21,... n; eger n < = 1 f(n) f(n-1) + f(n-2); aksi halde
13
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 1 ) + fib( n - 2 ); }
14
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) fib(3) +
15
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) + fib(3) fib(0) fib(1) +
16
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) + fib(3) fib(0) + fib(1)
17
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) + fib(3) + fib(1)
18
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) + fib(3) + fib(1)
19
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) + fib(3) + fib(1)
20
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) + fib(3) + 1
21
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) + fib(3) + 1
22
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1
23
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(3) 1 + + 1
24
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(3) 1 + fib(1) fib(2) + 1 +
25
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(3) 1 + fib(1) fib(2) + 1 +
26
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(3) 1 + fib(2) + 1 1 +
27
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) fib(2) + 1 1 +
28
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + fib(2) fib(0) fib(1) +
29
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + fib(2) fib(0) fib(1) +
30
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + fib(2) fib(1) +
31
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + fib(2) fib(1) +
32
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + fib(2) + fib(1)
33
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + fib(2) + 1
34
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + fib(2) + 1
35
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + 1 + 1
36
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + 1 + 1
37
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + 2 + 1 1 + 1 + 1
38
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + 2 + 1 1 + 1 + 1
39
Example: Computation of fib(4)
long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } 3 1 + 2 + 1 1 + 1 + 1
40
Example: Computation of fib(4)
Thus, fib(4) returns the value 3. 3 1 + 2 + 1 1 + 1 + 1
41
Tail yineleme: • Yineleme çağrısı metodun en sonunda yapılır.
public int recFact(int n) { if (n<=1) return 1; else return n * recFact(n-1); } public void tail() ….. tail();
42
Nontail yineleme • Yineleme çağrısından sonra başka işlemler yapılır (yazdırma v.b.). public int nontail(int n) { if (n > 0) ……. nontail(n-1); Console.WriteLine(n); }
43
Dolaylı (Indirect) yineleme
• Yineleme çağrısı başka bir fonksiyonun içinden yapılır. void A(int n) { if (n <= 0) return 1; n- -; B(n); } void B(int n) A(n);
44
İçiçe (Nested) yineleme
• Yineleme çağrısı içindende yineleme çağrısı yapılır. public int A(int n, int m) { if (n <= 0) return 1; return A(n-1, A(n-1, m-1)); }
45
İkili Arama binarysearch(int a[],int n,int low,int high) { int mid;
if (low > high) return -1; mid = (low + high)/2; if(n == a[mid]) { printf("The element is at position %d\n",mid+1); return 0; } if(n < a[mid]) { high = mid - 1; binarysearch(a,n,low,high); } if(n > a[mid]) { low = mid + 1; }
46
Bağlı Liste Tersten Yazdırma
void print(Elem *list) { if (list != NULL) {print(list->next); cout>>list->bilgi; }
47
Hızlı Sıralama
48
Quicksort örnek Sort the array containing: 9 16 4 15 2 5 17 1
Pivot Partition < 9 < Partition 2 1 4 5 15 16 17 Concatenate 1 2 5 15 17 5 Concatenate 1 2 4 Concatenate
49
Birleştirmeli Sıralama
50
MergeSort Örnek 1 2 3 4 5 6 7 8 2 9 4 5 3 1 6 Divide Divide 8 2 9 4 5 3 1 6 Divide 1 element 8 2 9 4 5 3 1 6 Merge 2 8 4 9 3 5 1 6 Merge Merge Sorted Array
51
Hanoi Kulesi Üç kule (A,B,C) olan bir sistemde yarıçapı birbirinden farklı 4 tane diskin A kulesine yerleştirilir. Kurallar : Bir diskin altında yarıçapı daha küçük bir disk bulunamaz. Bir diskin üzerine yarıçapı daha büyük bir disk yerleştirilemez. Bir anda bir kulenin sadece en üstündeki disk diğer bir kuleye yerleştirilebilir. Bir anda bir disk hareket ettirilebilir. Problemde istenen : B direğinden de yararlanarak tüm disklerin C’ye yerleştirilmesi.
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.