• 29-10-2023, 15:12:16
    #1
    Merhaba arkadaşlar. Aşağıdaki kodun mantığı nedir ve sonuç neden 11 çıkar.

    int foo(int n) {
    if (n != 0)
    if (n%2==0)
    return n + foo(n-1);
    else
    return n - foo(n-1);
    else
    return n;
    }

    foo(10);

    ****************
    Şimdi burada n=10 oluyor ve return 10 + foo(9) satırını nasıl toplayacağız ki?
  • 29-10-2023, 15:15:56
    #2
    Platin üye
    Hocam ben anlamam ama chat gpt şöyle diyor soruna cevap olarak

    Bu kod, bir rekürsif (recursive) fonksiyon olan foo'yu tanımlar. Bu fonksiyon, bir tamsayı alır ve aşağıdaki kurallara göre çalışır:
    1. Eğer n sıfırdan farklı ise:
      • Eğer n çift ise, n'yi n-1 ile çarpıp sonuca ekler.
      • Eğer n tek ise, n'yi n-1 ile çarpıp sonuçtan çıkarır.
    2. Eğer n sıfırsa, fonksiyon n'yi geri döndürür.
    Şimdi foo(10) çağrısıyla başladığımızda, aşamaları takip edelim:
    1. n = 10 olduğu için, n != 0 şartı sağlanır. Ayrıca n çift olduğundan, n + foo(n-1) yolu izlenir.
    2. return 10 + foo(9) ifadesi çalıştırılır.
    3. Şimdi foo(9) fonksiyonu çağrılır. Bu sefer n = 9 olur.
    4. n != 0 şartı yine sağlandığı için, n tek olduğundan, n - foo(n-1) yolu izlenir.
    5. return 9 - foo(8) ifadesi çalıştırılır.
    6. foo(8) fonksiyonu çağrılır. Bu sefer n = 8 olur.
    7. Bu işlem devam eder ve en sonunda foo(0) fonksiyonu çağrılır.
    8. Bu durumda, n = 0 olduğundan, return n; yani return 0; çalışır.
    9. Sonuçlar yukarı doğru sırasıyla hesaplanır: 0, 8 - 0 = 8, 9 - 8 = 1, 10 + 1 = 11.
    Sonuç olarak, foo(10) çağrısının sonucu 11 olur.
  • 29-10-2023, 15:28:15
    #3
    ryildirim1071 adlı üyeden alıntı: mesajı görüntüle
    Hocam ben anlamam ama chat gpt şöyle diyor soruna cevap olarak

    Bu kod, bir rekürsif (recursive) fonksiyon olan foo'yu tanımlar. Bu fonksiyon, bir tamsayı alır ve aşağıdaki kurallara göre çalışır:
    1. Eğer n sıfırdan farklı ise:
      • Eğer n çift ise, n'yi n-1 ile çarpıp sonuca ekler.
      • Eğer n tek ise, n'yi n-1 ile çarpıp sonuçtan çıkarır.
    2. Eğer n sıfırsa, fonksiyon n'yi geri döndürür.
    Şimdi foo(10) çağrısıyla başladığımızda, aşamaları takip edelim:
    1. n = 10 olduğu için, n != 0 şartı sağlanır. Ayrıca n çift olduğundan, n + foo(n-1) yolu izlenir.
    2. return 10 + foo(9) ifadesi çalıştırılır.
    3. Şimdi foo(9) fonksiyonu çağrılır. Bu sefer n = 9 olur.
    4. n != 0 şartı yine sağlandığı için, n tek olduğundan, n - foo(n-1) yolu izlenir.
    5. return 9 - foo(8) ifadesi çalıştırılır.
    6. foo(8) fonksiyonu çağrılır. Bu sefer n = 8 olur.
    7. Bu işlem devam eder ve en sonunda foo(0) fonksiyonu çağrılır.
    8. Bu durumda, n = 0 olduğundan, return n; yani return 0; çalışır.
    9. Sonuçlar yukarı doğru sırasıyla hesaplanır: 0, 8 - 0 = 8, 9 - 8 = 1, 10 + 1 = 11.
    Sonuç olarak, foo(10) çağrısının sonucu 11 olur.
    9.madde tam oturmadı