Özyineleme
down adlı, bir int parametreli (n) bir metot yazın. n 0 veya daha küçükse çıplak return; ile durun. Değilse n yazın, sonra aynı metodun içinden down(n - 1) çağırın. Main içinden down(3); çağırın. Ekran üç satır göstermelidir: 3, sonra 2, sonra 1. Metot daha küçük bir sayıyla kendini çağırmaya devam eder; dur zinciri bitirene kadar. Durmalı bu öz çağrı, bu sayfanın öğrettiği şeydir. Genel sınıf adını Pine tutun.
Kendini çağıran bir metot
Kapsam sayfasında mark bir kez çalışıp bitmişti. Burada down çalışır, sonra ilk çağrı tam bitmeden yeni bir argümanla başka bir down başlatır. Her çağrının kendi n değeri vardır. Zincir yalnızca bir çağrı dura çarptığında biter.
Pine dosyasını açın. Sınıf adı Pine kalır. Bu sayfa türü yeniden adlandırmaz. Hâlâ Main’de tuttuğunuz her şey bir mark demosuysa onu silin. Artakalan her paint’i silin. Her ReadLine satırını silin. Tutacağınız dosyada yazı bekleyişi yoktur.
Main dışında, yine sınıf süslü parantezlerinin içinde static void down(int n) yazın. Bu sayfada void tutun: her adım yazar ve tipik bir return değeriyle geri götürülecek bir şey yoktur. Dur, değersiz return; kullanır — yalnızca bu çağrıyı bitirir. Çalıştırmadan önce dosyayı kaydedin. İlk tam program sonraki kutudadır.
Tutacağınız dosya
Bu, ilk çalıştırdığınız sürümdür. Main bir çağrı tutar. down duru, yazma satırını ve öz çağrıyı tutar.
using System;
public class Pine
{
public static void Main()
{
down(3);
}
static void down(int n)
{
if (n <= 0)
{
return;
}
Console.WriteLine(n);
down(n - 1);
}
}
Yukarıdan okuyun. using System; kısa adları hazırlar. public class Pine türü adlandırır. public static void Main() çalışma zamanının başladığı yerdir. down(3) çağrısı n değeri 3 iken girer. Bu 0’dan büyüktür, bu yüzden metot 3 yazar, sonra down(2) çağırır. İkinci çağrı 2 yazar, sonra down(1) çağırır. Üçüncü çağrı 1 yazar, sonra down(0) çağırır. 0’lı çağrı n <= 0’a çarpar ve yazmadan döner. Zincir biter. Ekranda üç satır: 3, sonra 2, sonra 1.
dotnet run ile çalıştırın. Program üç satır yazar ve durur. Sizin bir şey yazmanızı beklemez. dotnet run bekliyorsa dosyada hâlâ ReadLine vardır. O satırı silin ve down(3); ile yukarıdaki down metodunu tutun. Ekran 3, sonra 2, sonra 1 gösterir. Ekran yalnızca 4 gösteriyorsa artakalan bir mark(4) çağrısı hâlâ çalışıyordur. Ekran down harflerini gösteriyorsa yazma satırında tırnak vardır: Console.WriteLine("down");. Yanlış satırlar gösteren bir ekran için .NET SDK’yı yeniden kurmayın.
Bir tam çalıştırmayı sırayla yürüyün. C# Main’den başlar. down(3) çağrısı n değeri 3 iken girer. Bu 0’dan büyüktür, bu yüzden metot 3 yazar, sonra down(2) çağırır. İkinci çağrı 2 yazar, sonra down(1) çağırır. Üçüncü çağrı 1 yazar, sonra down(0) çağırır. 0’lı çağrı n <= 0’a çarpar ve yazmadan döner. Zincir biter. Ekran yazılan üç satırı tutar.
Bu çağrıların her biri aynı metot metninden ayrı bir geçiştir. İlk geçiş down(2)’yi başlattıktan sonra hâlâ bekleyen işe sahiptir — yani iç çağrı döndükten sonra bitirmek. Dört farklı metot adı yazmazsınız. Bir metot yazarsınız ve daha küçük argümanın dura doğru ilerlemeyi taşımasına izin verirsiniz.
Başlangıcı down(2); olarak değiştirirseniz ekran 2 sonra 1 göstermelidir. Metot gövdesi aynı kalır; yalnızca ilk argüman değişir, bu yüzden zincir daha kısadır. down(4); ile başlamak dört satır göstermelidir: 4, 3, 2, 1. Yine gövde değişmez; yalnızca Main ilk değeri seçer.
Duru önce koyun
Dur, yazma satırından ve öz çağrıdan önce denetlenmelidir. Önce yazıp n’yi hiç test etmezseniz veya her zaman aynı değerle down(n) çağırırsanız program bitmez. Bu başlangıç şeklinde if (n <= 0) bloğunu metodun üstünde tutun.
using System;
public class Pine
{
public static void Main()
{
down(2);
}
static void down(int n)
{
if (n <= 0)
{
return;
}
Console.WriteLine(n);
down(n - 1);
}
}
Bu ikinci dosyadır. Aynı gövdeyi daha kısa bir başlangıçla öğretir. dotnet run çalıştırın. Ekran 2 sonra 1 gösterir. Dur, n 0’a ulaşınca zinciri yine bitirir. down(n - 1) yerine down(n) yazmak aynı sayıyı tekrar tekrar gönderir. O zaman program sistem durdurana kadar çalışabilir. Daha küçük argüman fikrin parçasıdır: her çağrı dura doğru ilerlemelidir.
Duru çıkış kapısı gibi düşünün. Yazma satırı bu adımda yaptığınız iştir. Öz çağrı sonraki adımdır. Kapı yoksa her adım sonsuza kadar başka bir adım açar. Sonraki adım aynı n’yi kullanırsa kapıya asla yürümezsiniz. İki hata kaynakta farklı görünür ama ikisi de bu başlangıç şeklinde temizce bitmeyi reddeder. 2 sonra 1 gördükten sonra saklamak istediğiniz şekil down(3) ise tutulan dosyayı geri koyun.
Ekranın yanında çağrı zinciri
Bir başlangıç çağrısını ürettiği satırların yanında okuyun. Her satır hâlâ yazan bir down ziyaretidir.
📊 down call chain for down(3)
| Call | Value of n | Screen line |
|---|---|---|
first down(3) |
3 |
3 |
then down(2) |
2 |
2 |
then down(1) |
1 |
1 |
then down(0) |
0 |
(no line — stop) |
Yaygın bir karışıklık duru atlamaktır. O zaman her çağrı yazar ve sonsuza kadar yeniden çağırır. Başka bir karışıklık, özyinelemeli çağrıdan önce yazmak yerine sonra yazmaktır. Bu sayfada yazma satırı önce gelir, bu yüzden ekran geri sayar. Console.WriteLine’ı down(n - 1) altına taşırsanız satır sırası değişir — burada gösterilen geri sayım için yazma satırını öz çağrının üstünde tutun.
Önceki sayfadaki kapsam hâlâ küçük bir şekilde önemlidir: her çağrının n’si o çağrının kendi parametresidir. Dış çağrının n’si iç çağrı çalışırken kendini yeniden yazmaz. İç çağrının ayrı bir n’si vardır. İç çağrı döndüğünde dış çağrı öz çağrıdan sonraki satırdan devam eder — ve bu sayfada bu yalnızca metodun sonudur.
Artakalan bir mark demosu aynı dosyada oturup Main hâlâ mark çağırıyorsa ekranı karıştırabilir. Bu sayfayı öğrenirken Main’i down(3); veya down(2); olacak şekilde temizleyin. down’u Main’in süslü parantezlerinin içine yuvalamayın. Metotlar sınıfın içinde, Main’in yanında oturur.
Main içinde Console.WriteLine("down"); yazmak down sözcüğünü yazar. Zinciri başlatmaz. Üç geri sayım satırı istediğinizde down(3); tutun.
Bir şekil daha: dur hiçbir şey yazmaz
0’lı çağrının sessizce döndüğünü zaten gördünüz. Başlangıç değeri 1 ile de pratik yapabilirsiniz. Ekran tek satır göstermelidir: 1. Sonraki çağrı duran down(0)’dır.
using System;
public class Pine
{
public static void Main()
{
down(1);
}
static void down(int n)
{
if (n <= 0)
{
return;
}
Console.WriteLine(n);
down(n - 1);
}
}
Bu üçüncü dosyadır. dotnet run çalıştırın. Ekran bir satır gösterir: 1. Aynı metot gövdesi down(3), down(2) ve down(1)’i kapsar. Yalnızca Main’deki ilk argüman değişir. Bu başlangıç sayfası için yeterlidir. Özyinelemeden toplam döndürmek gibi daha derin fikirler sonraki kurslara kalır; burada hedef öz çağrı, daha küçük argüman ve durdur.
Ekran hiç bir şey göstermiyorsa Main’in hâlâ başka bir şey çağırıp çağırmadığını veya dur testinin yanlış olup olmadığını kontrol edin — örneğin if (n >= 0) pozitif bir n ile başladığınızda herhangi bir yazmadan önce durur. Sessiz çıkış olarak n <= 0 tutun ve en az bir satır görünsün diye Main’de pozitif bir başlangıç tutun.
down(int n) yazabilir, n 0 veya daha küçükken durabilir, n yazabilir, sonra down(n - 1) çağırabilirsiniz. Main’den tek bir çağrı tüm zinciri başlatır. Ekran geri sayım satırlarını gösterir. Dura doğru hiç ilerlemeyen bir metot bitmez. Sonraki sayfa classes’tır; orada bu static metot sayfalarının ötesinde alanlı türler kurmaya başlarsınız.
Ekran geri sayımı tutar
Tutacağınız dosya, Main down(3); çağırdığında 3, sonra 2, sonra 1 yazar. Öz çağrı down içindedir ve down harfleri tırnak içine almadıkça ekranda basılı bir etiket olarak yoktur. down’u Main içine yuvalamak bu dersin kurduğu şekil değildir.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek