Ö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.
 






