Özniyeli(recursive) metotlar adından da anlaşılacağı üzere kendi kendini yenileyen metotlardır.Bu metodları döngü ile çözemediğimiz problerde kullanırız.
Örnek 1-
Aşağıda Döngü ile çözülmiş bir kod bulunmaktadır.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package RecursiveMetods;
import java.util.Scanner;
public class Loop {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("bir sayi giriniz");
int girilenSayi=sc.nextInt();
int toplam=0;
for(int i=1;i<=girilenSayi;i++){
toplam=toplam+i;
}
System.out.println("girilen sayiya kadar olan sayiların toplamı= "+toplam);
}
}
|
Döngü ile bu şekilde çözülebilir.Biz aynı problemi recursive metot kullanarak çözmeye çalışalım.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package RecursiveMetods;
import java.util.Scanner;
public class Recursive {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("bir sayi giriniz");
int girilen=sc.nextInt();
int toplam=toplam(girilen);
System.out.print("girilen sayiya kadar olan sayiların toplamı= "+toplam);
}
public static int toplam(int girilenSayi){
if(girilenSayi<=1)
return girilenSayi;
else
return girilenSayi+toplam(girilenSayi-1);
}
}
|
toplam metotdunda girilen sayinın 1 ‘den küçük olma durumu karşılaştırılıyor ve küçükse kendisi döndürülüyor.
else de ise girilensayi ile bir eksiği olan sayinyı tekrar metotda sokup topluyor.Bunu resimle şöyle anlatalım.
Örnek 2-
Şimdi ise kodu biraz değiştirelim ve bu sefer girilen sayiya kadar olan sayiların karelerini hesaplayan kodu yazmaya çalışalım.İlk olarak dögüleri kullanarak yazalım.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package RecursiveMetods;
import java.util.Scanner;
public class Loop2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("bir sayi giriniz");
int girilenSayi=sc.nextInt();
int c=0;
for(int i=1;i<=girilenSayi;i++){
c=c+(int)(Math.pow(i, 2));
}
System.out.println("girilen sayiya kadar olan sayiların kareleri toplamı= "+c);
}
}
|
Görüldüğü gibi çok bir fark yok sadece bu sefer for ile her i sayisını karseni alıp c değişkeni ile topluyor.
Şimdi ise recursive metot kullanarak yapalım
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package RecursiveMetods;
public class Recursive2 {
public static void main(String[] args) {
System.out.println(kare(3));
}
public static int kare(int girilenSayi){
if(girilenSayi<=1)
return girilenSayi;
else
return (int)Math.pow(girilenSayi, 2)+kare(girilenSayi-1);
}
}
|
Burada yine ilk yaptığımız koddan çok bir fark yok.Yine aynı şekilde kareseni alıp bir eksiğini metota gönderip topluyor.