Eln 1002 Bilgisayar Programlama II



Benzer belgeler
Özyineleme {\} /\ Suhap SAHIN Onur GÖK

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Özyineleme (Recursion)

Fonksiyonlar. Yrd.Doç.Dr.Bülent Çobanoğlu

Deney 7: Fonksiyon Tanımlama ve Parametre Aktarım Yöntemleri

BLM111 Programlama Dilleri I. Hafta 10 Diziler. Yrd. Doç. Dr. Caner ÖZCAN

Algoritma ve Programlama II Recursive Fonksiyonlar Dosyalama

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-10 Diziler. Yrd. Doç. Dr. Ümit ATİLA

Örneğin iki sayının toplamının hesaplayacak bir fonksiyon şöyle tanımlanabilir:

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

Özyineleme (Recursion)

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Görsel Programlama 1

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

2) /* Kullanıcıdan alınan iki sayının obebini alt fonksiyon yardımı ile hesaplayan C programı*/

Eln 1001 Bilgisayar Programlama I

Telefon Rehberi Uygulaması

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-1 Kapsama Kuralları & Rasgele Sayı Üretimi & Rekürsif (Özyinelemeli) Fonksiyonlar

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

#include<stdio.h> #include<conio.h> #define doktorsayisi 3. typedef struct dr{ int ay1, ay2, ay3, ay4; } doktor; float hesapla(doktor dktr){

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Hafta 11 Çok Boyutlu Diziler

C ile Uygulamalar 3 - Cevaplar

BMT 206 Ayrık Matematik. Yük. Müh. Köksal GÜNDOĞDU 1

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

Klavyeden girilen metnin karakter uzunluğu bulan C programı. Klavyeden girilen metin içerisindeki küçük ve büyük harf sayısını bulan C programı

Dr. Fatih AY Tel: fatihay@fatihay.net

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

YIĞINLAR YIĞINLAR. Yığın İşlemleri Postfix, Prefix, Infix. G. Ü. Bilgisayar Mühendisliği Bölümü

C++ Dersi: Nesne Tabanlı Programlama

Final Sınavı Soruları Bahar 2018

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

AVL Agacı {\} /\ Suhap SAHIN Onur GÖK

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Dr. Fatih AY Tel: fatihay@fatihay.net

BİL-142 Bilgisayar Programlama II

7. FONKSİYONLAR. Dönüş_Tipi Fonksiyon_Adı (tip giriş_parametreleri);

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

C Programlama Dilininin Basit Yapıları

ESM-361 Mikroişlemciler. 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#3: ALGORİTMA ANALİZİ#2

Hafta 12 Karakter Tutan Diziler

C PROGRAMLAMA D İ L İ

Adım Adım C. Dr. Hidayet Takcı

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Programlama Dilleri 1. Ders 5: Göstericiler

Diziler (Arrays) Çok Boyutlu Diziler

C ile Uygulamalar 1 - Cevaplar

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

BİLG Dr. Mustafa T. Babagil 1

C++ Dersi: Nesne Tabanlı Programlama 2. Baskı

// Aşağıdaki programın çıktısı nedir?

Programlama Dilleri Laboratuvarı

Yrd. Doç. Dr. Caner ÖZCAN

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr)

Adı Soyadı : Öğrenci No :

Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler

Final Sınavı Soruları Güz, Süre: 90 Dakika

SAKARYA ÜNİVERSİTESİ BİLGİSAYAR VE BİLİŞİM BİLİMLERİ FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ GÜZ DÖNEMİ PROGRAMLAMAYA GİRİŞ DERSİ

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

1 PROGRAMLAMAYA GİRİŞ

F(A, N, K) // A dizi; N, K integer if N<0 then return K; if A[N]>K then K = A[N]; return F(A, N-1, K);

BIL222 Veri Yapıları ve Algoritmalar

Final Sınavı Örnek Soruları Güz 2018 Süre: 90 Dakika

MATLAB de Programlama & Dosya Yönetimi. EE-346 Hafta 6 Dr. Ayşe DEMİRHAN

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

YAPILAR (STRUCTURES)

ALGORİTMA VE PROGRAMLAMA I

Dizgiler. C dilinde karakter m şeklinde tek tırnak içerisinde yazılan ifadelerdir. Bu karakterlerin her biri aslında bir tamsayı ile ifade edilir.

ÖZYİNELEME RECURSION. Yrd. Doç. Dr. Aybars UĞUR

Kocaeli Üniversitesi Bilgisayar Mühendisliği Programlama 2 Dersi Final Sınavı. A Grubu

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10

C++ Dersi: Nesne Tabanlı Programlama

ALGORİTMA VE PROGRAMLAMA II

Algoritma ve Programlama II Dersi 3.ÖDEVĠ

int main(void) { int num = 0; int input = 1; int retval = 0; struct NODE *nodepointer; nodepointer = (struct NODE *)malloc(sizeof(struct NODE));

ÖZYİNELEME RECURSION. Doç. Dr. Aybars UĞUR

Jval tipi. Genel veri yapılarını kullanacağımız zaman Jval den faydalanırız.önemli olanlar aşağıda mevcuttur:

D İ Z İ L E R A R R A Y S

C++ Dilinde Bazı Temel Algoritmalar

ALGORİTMA VE PROGRAMLAMA I

Eln 1002 Bilgisayar Programlama II

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

int printf (const char *format [, argument,...]);

Bil Hafta Çalışma Soruları (Yanıtlar)

Algoritmalar. Heap Sort. Bahar 2017 Doç. Dr. Suat Özdemir 1

C++ Dersi: Nesne Tabanlı Programlama

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

#include <stdio.h> int main(void) { float sayi; float * p; p = &sayi; printf("deger girin:"); scanf("%f", p); printf("girilen deger:%f\n", *p);

MATEMATĠKSEL ĠġLEMLER

Transkript:

Eln 1002 Bilgisayar Programlama II Recursive Fonksiyonlar Ne ÖĆreneceĆiz? Recursion nedir? Recursive Fonksiyon tanımı Uygulama ve Örnekler Recursive Çözüm Tasarlama

Recursion Nedir? Birçok problem, kendisinin daha basit versiyonlarının birleştirilmesiyle çözülebilir. Recursion : Kendine bağlı olarak tanımlanan bir prosedürdür. Recursion ın bileşenleri : Base Case : Basit ve recursive olmayan çözüm. General Case : Recursive tanımlama Covergence : Base case e yaklaşma Kuyruk ğşlemleri

Örnek : Bir Say¹n¹n Faktöriyelini Bulma Tanım : n! = n X (n-1) X (n-2) X... X 1 Base Case : n = 0 veya n = 1 ise n! = 1 General Case : n! = n X (n-1) X (n-2) X... X 1 = n X (n-1)! Eğer n > 1 ise n! = n X (n-1)! Covergence : Her adımda n bir azaltılarak base case e yaklaşılıyor. Örnek : Bir Say¹n¹n Faktöriyelini Bulma

Örnek : Bir Say¹n¹n Faktöriyelini Bulma #include<stdio.h> /*fonksiyon prototipleri*/ int faktoriyel(int); int main() int sayi; printf("faktoriyeli bulunacak sayiyi giriniz : "); scanf("%d", &sayi); int fakt = faktoriyel(sayi); printf("%d! = %d", sayi, fakt); return 0; Faktöriyelin iteratif gerçeklenmesi : /*Foksiyon tanimlari*/ int faktoriyel(int n) int faktor; if(n<=1) faktor = 1; else faktor = n*faktoriyel(n-1); return faktor; Örnek : Fibonacci Say¹lar¹ Finobacci serisi : 0, 1, 1, 2, 3, 5, 8, 13, 21,... Tanım : 0 ve 1 ile başlar, sonraki sayılar kendinden önceki iki sayının toplamı ile oluşturulur. Base Case : fibonacci(0) = 0 fibonacci(1) = 1 General Case : fibonacci(n) = fibonacci(n-1) + fibonacci(n-2) Covergence : n azaltılarak base case e yaklaşılır.

Örnek : Fibonacci Say¹lar¹ Örnek : Fibonacci Say¹lar¹ #include<stdio.h> /*fonksiyon prototipleri*/ long fibonacci(int); int main() int sayi; long sonuc; printf("fibonacci degeri bulunacak bir sayi giriniz : "); scanf("%d", &sayi); sonuc = fibonacci(sayi); printf("fibonacci(%d) = %ld", sayi, sonuc); return 0; /*Fonksiyon tanimlari*/ long fibonacci(int n) long fib; if(n<=1) fib = n; else fib = fibonacci(n-1) + fibonacci(n-2); return fib; Fibonacci serisi iteratif olarak oluşturulabilir mi?

Örnek : Üst Alma Tanım : taban ust = taban X taban X taban X... X taban ust adet Base Case : taban 1 = taban veya taban 0 = 1 General Case : taban ust = taban X taban (ust-1) Covergence : ust bir azaltılarak base case e yaklaşılır. Örnek : Üst Alma #include<stdio.h> /*Fonksiyon prototipleri*/ double power(double, int); int main() int uss; double tab, sonuc; printf("tabani giriniz : "); scanf("%lf", &tab); printf("ustu giriniz : "); scanf("%d", &uss); sonuc = power(tab, uss); printf("(%lf)^%d = %lf", tab, uss, sonuc); return 0; /*Fonksiyon tanimlari*/ double power(double taban, int us) double test; if(us==0) test = 1; else test = taban*power(taban, us-1); return test;

Örnek : Dizi Elemanlar¹n¹n Toplam¹ Tanım : a N elemanlı bir dizi olmak üzere, a dizisinin elemanları toplamı a[0] + a[1] +... + a[n-1] olarak tanımlanır. Base Case : Eğer dizi boş ise toplam 0 dır veya Eğer dizi tek elemanlıysa toplam bu tek elemanın değerine eşittir. General Case : a dizisinin elemanları toplamı = son eleman + dizide kalan diğer elemanların toplamı Covergence : Dizide son elemandan başlayarak her eleman işleme sokulur ve dizinin boyu her adımda bir azaltılır ve base case e yaklaşılır. Örnek : Dizi Elemanlar¹n¹n Toplam¹ #include<stdio.h> /*Fonksiyon prototipleri*/ double topladizi(const double*, int); int main() double diz[] = 1.5, 2.5, 3.0, 1.0, 3.5; double sonuc = topladizi(diz, 5); printf("dizinin Elemanlari Toplami : %lf", sonuc); return 0; double topladizi(const double *dizi, int N) double toplam; if(n<0) toplam = 0; else toplam = dizi[n-1] + topladizi(dizi, N-1); Dizide baştan başlayarak recursive toplama işlemini gerçekleştirebilir miydik? Nasıl? return toplam;

Recursive Çözüm Tasarlama Problemi, kendinin daha basit versiyonlarını kullanabilecek şekilde nasıl parçalarım? Problemi farklı yollarla tekrar tanımla. Başlangıçta, ortada ve sonda anahtar adımları bul. Kendini tekrarlamayacak base case i bul. Recursive parçaların sıralanışını ve base case i organize et. Her zaman sonlanacağından emin ol. Recursion ile ilgili ağaç çiz. Gerekli zamanı analiz et (ağaç içindeki node sayısı). Gerekli yeri analiz et (ağaç derinliği). SONUÇ : Recursive mi? Iteratif mi?