Çözüldü Recursive metotlar neye göre dönüş yapıyor?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

350070

Megapat
İlk 5 Haneli Mesajınız!
Katılım
6 Aralık 2017
Mesajlar
10.605
Makaleler
4
Çözümler
41
Merhaba arkadaşlar.
Şimdi şöyle bir kod satırı atayım;

Java:
static int f(int x){
 if(x == 1){
 return 1;
 }
 return x + f(x-1);

}

Ha bire X değerini azaltıp, 1 olana kadar tekrar kendini tekrar fonksiyon.
1'e kadar azalttığı zaman, if koşulundan ötürü, 1 değerini döndürmesi gerekmez mi?
Yani yukarıdaki tanımlı fonksiyona göre;

Java:
int y = f(10);
System.out.println(y);

Çıktı olarak 1 değerini vermesi lazım gibi duruyor ama vermiyor. Neden vermiyor?
 
Çözüm
Java:
public class Main
{
    public static void main(String[] args) {
        System.out.println(f(10));
    }
    static int f(int x){
        if (x == 1){
            return 1;
        }
            System.out.println(x);
            return f(x-1);
    }
}

Şimdi şöyle sen F(3) yaptığın zaman program X sayısına odaklanacak ve 2. return çalışacak.
X = 3 olduğu için nihai dönen değer 3+F(2) olacaktır.
F(2)'de nihai dönen değer 2 + F(1) olacaktır. F(1)'de dönen değer 1 olacaktır.
Toparlarsak aslında F(3) dediğimiz fonksiyon;
3 + 2 + 1 değeri döndürür.
F(4):
4+3+2+1 değeri döndürür.
F(5):
5 + 4 + 3 + 2 + 1 değeri döndürür.

f(N):
n+(n-1)+(n - 1 - 1) + ..... + 1 değeri döndürür.

Özetle;
Sen sırası ile f çalıştırmıyorsun sen ilk çalıştırdığın f içinde sırası ile f çalıştırıyorsun ve o f'lerden dönen değerleri topluyorsun.
Java:
public class Main
{
    public static void main(String[] args) {
        System.out.println(f(10));
    }
    static int f(int x){
        if (x == 1){
            return 1;
        }
            System.out.println(x);
            return f(x-1);
    }
}

Şimdi şöyle sen F(3) yaptığın zaman program X sayısına odaklanacak ve 2. return çalışacak.
X = 3 olduğu için nihai dönen değer 3+F(2) olacaktır.
F(2)'de nihai dönen değer 2 + F(1) olacaktır. F(1)'de dönen değer 1 olacaktır.
Toparlarsak aslında F(3) dediğimiz fonksiyon;
3 + 2 + 1 değeri döndürür.
F(4):
4+3+2+1 değeri döndürür.
F(5):
5 + 4 + 3 + 2 + 1 değeri döndürür.

f(N):
n+(n-1)+(n - 1 - 1) + ..... + 1 değeri döndürür.

Özetle;
Sen sırası ile f çalıştırmıyorsun sen ilk çalıştırdığın f içinde sırası ile f çalıştırıyorsun ve o f'lerden dönen değerleri topluyorsun.
 
Son düzenleme:
Çözüm
Java:
public class Main
{
    public static void main(String[] args) {
        System.out.println(f(10));
    }
    static int f(int x){
        if (x == 1){
            return 1;
        }
            System.out.println(x);
            return f(x-1);
    }
}

Şimdi şöyle sen F(3) yaptığın zaman program X sayısına odaklanacak ve 2. return çalışacak.
X = 3 olduğu için nihai dönen değer 3+F(2) olacaktır.
F(2)'de nihai dönen değer 2 + F(1) olacaktır. F(1)'de dönen değer 1 olacaktır.
Toparlarsak aslında F(3) dediğimiz fonksiyon;
3 + 2 + 1 değeri döndürür.
F(4):
4+3+2+1 değeri döndürür.
F(5):
5 + 4 + 3 + 2 + 1 değeri döndürür.

f(N):
n+(n-1)+(n - 1 - 1) + ..... + 1 değeri döndürür.

Özetle;
Sen sırası ile f çalıştırmıyorsun sen ilk çalıştırdığın f içinde sırası ile f çalıştırıyorsun ve o f'lerden dönen değerleri topluyorsun.
Çok iyi anladım. Sağ olun.
Mesela x = 10;

return 10 + f(x-1) + f(x-2) + f(x-3) + .... + f(x-9) oluyor.
yani 10 + 9 + 8 + .... + f(1)'e kadar.
f(1)'de return olarak 1 döndür koşulu var. Çok iyi anladım.
 

Technopat Haberler

Yeni konular

Geri
Yukarı