none
Recursively Method Tekrarlama Yakalama RRS feed

  • Soru

  • Merhaba Recursively Method sonsuza kadar çalışmasın diye eğer childrenlarının içerisinde kendisi varsa, kendisi olduğundan dolayı recursive method kendisini tekrardan çağıracağından dolayı sonra yine kendisine rast geleceğinden dolayı sonsuza kadar gidiyor. Bu durumu nasıl yakalayabilirim. 

    Şimdiden teşekkürler.

    13 Şubat 2016 Cumartesi 22:38

Yanıtlar

  • Teşekkürler ilginiz için stackoverflowda cevap alındı ve istediğim şekilde çalıştı. 

    Cevap bu belki ihtiyacı olan olur. 

    void RecursiveMethod( Table table, List<string> visitedTables )
    {
        // note the currently visited table
        var extendedList = visitedTables.ToList();
        extendedList.Add( table.Name );
    
        // do your thing with the table...
    
        // ... and recurse deeper
        foreach (var referencedTable in table.ReferencedTables)
            if (!visitedTables.Contains( referencedTable.Name ))
                RecursiveMethod( referencedTable, extendedList );
    }

    • Yanıt Olarak İşaretleyen Serkan Canseven 15 Şubat 2016 Pazartesi 07:32
    14 Şubat 2016 Pazar 22:07

Tüm Yanıtlar

  • Metodunuzun kendini çağırabileceği durum haricinde bir şart daha belirtip metoddan çıkmasını sağlayabilirsiniz.

    Yani:

    static void Main(string[] args)
    {
        Console.WriteLine("Please enter a number");
        int number = Convert.ToInt32(Console.ReadLine());
        Fibonacci(0, 1, 1, number);
    }   
    
    public static void Fibonacci(int a, int b, int counter, int number)
    {
        Console.WriteLine(a);
        if (counter < number) Fibonacci(b, a+b, counter+1, number);
    }


    -

    13 Şubat 2016 Cumartesi 23:07
  • Merhaba Soner Bey tam olarak ne yaptığımı anlatim önce,

    Önce sql veritabanımdan bir table ismi alıyorum sonra ise o table içerisindeki diğer table ların ID leri varsa o table ları buluyorum. Bu işlemi Recursively Method şeklinde yazarak bir table ın Parent hiyerarşisini çıkarıyorum.

    Örneğin,

    Table A içerisinde TableB nin ID si var ben diyorumki Table A nın oluşması için önce Table B gerekiyor. Mesela Table B içerisindede başka bir Table ın ID si var onuda buluyorum varsa gidiyor bu böyle ve Bir Treeview oluşyor. 

    Fakat Table A için mesela Table B-Table C gerekiyor. Table B için Table D gerekiyor diyelim.Sonra Table C için Table E ,

    Table E için Table Z gerekiyor diyelim fakat bazen Table Z içinde Table C nin ID si olmuş olduğunda ve Table Z oluşturmak için Table C yi çağırdığımda burada bir sonsuz döngü oluşuyor.

    Yani eğer Table ın Parentları içerisinde kendisi varsa bunu nasıl yakalayabılırım ?

    Ayrıca Method dan çıkmasını istemiyorum eğer kendisi varsa atlayıp devam etmesini istiyorum taki en son table gelip o table oluşturmak için başka bir Table a ihtiyaç kalmadığına kadar.


    13 Şubat 2016 Cumartesi 23:31
  • Murat bey,

    Nasıl bir şey yapmak istediğinizi biraz açabilirmisin. Çünkü sanki tablo oluşturma fikri yanlışmış gibi geldi bana. Sanki sorununuz recursive methoddan ziyade tablı yapınızdan kaynaklanıyor.

    Demek istediğim bir hiyerarşik tablo oluşturacağında başka bir tabloya ilişki kurmak yerine, tablo kendine ilişki kurularak yapılır. Örneğin;

    Id
    ParentId
    CategoryName

    kategori tablosundaki ParentId yine aynı tablodaki Id ilişkili bir foreign key dir, buna "self referencing" deniyor. Yani n tane tablo yerine bir tablo olması lazım.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    14 Şubat 2016 Pazar 06:57
    Moderatör
  • Önay Bey ilk başta sadece bir tablo ismi veriyorum. Varsa foreign tablosu ilerliyor şu şekilde ; 

    Z nin içerisinde A ve D ID leri var gibi bu olay. Anın içierinde B , B nin içerisinde C tableının ID si var gibi.

    Z
      A
        B
          C
      D
        E
        F => Burada eğer Ftablosu içerisinde D veya Z tablosunun ID si varsa burada sonsuz tekrara giriyor.

    Umarım açıklayabilmişimdir.


    14 Şubat 2016 Pazar 13:14
  • daha kısa sorayım; neden birden fazla tablo yapıyorsun?

    ayrıca "tablonun Id si" ne demek?


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    14 Şubat 2016 Pazar 14:02
    Moderatör
  • Ben bodoslama olarak başka bir şey önereyim.

    -


    • Düzenleyen Soner KOYLU 14 Şubat 2016 Pazar 14:04 Düzeltme
    14 Şubat 2016 Pazar 14:03
  • Teşekkürler ilginiz için stackoverflowda cevap alındı ve istediğim şekilde çalıştı. 

    Cevap bu belki ihtiyacı olan olur. 

    void RecursiveMethod( Table table, List<string> visitedTables )
    {
        // note the currently visited table
        var extendedList = visitedTables.ToList();
        extendedList.Add( table.Name );
    
        // do your thing with the table...
    
        // ... and recurse deeper
        foreach (var referencedTable in table.ReferencedTables)
            if (!visitedTables.Contains( referencedTable.Name ))
                RecursiveMethod( referencedTable, extendedList );
    }

    • Yanıt Olarak İşaretleyen Serkan Canseven 15 Şubat 2016 Pazartesi 07:32
    14 Şubat 2016 Pazar 22:07