Rekursdive Methoden ...?

Ardaric

Erfahrenes Mitglied
Eines verstehe ich nicht: Wieso wird am Ende 100 .. 109 Ausgegeben? Wenn iNum == 0 ist, wird die if-Abfrage doch übersprungen, und dann gibt die Methode doch 100 + 0 zurück. Aber warum macht diese Methode zwischenschritte, und warum ist der Wert, der tatsächlich zurückgegeben wird 110?

Code:
using System;

namespace Kap7
{
	class CDirekt
	{
		static void Main(string[] args)
		{
			Console.WriteLine("Counter: {0}", Counter(10));
		}
		
		private static int Counter(int iNum)
		{
			Console.WriteLine(iNum);
			
			if(iNum > 0)
				Console.WriteLine("{0}", Counter(iNum - 1));
			
			return 100 + iNum;
		}
	}	
}

Ausgabe:
10
9
8
7
6
5
4
3
2
1
0
100
101
102
103
104
105
106
107
108
109
Counter: 110

So, dachte ich, sollte es aussehen:
10
9
8
7
6
5
4
3
2
1
0
Counter: 100
 
Zuletzt bearbeitet:
So gehts auch mit Deinem Programm. Das Console.WriteLine im Rekursiven Aufruf muss raus!

Code:
using System;

namespace Kap7
{
      class CDirekt
      {
         static void Main(string[] args)
         {
              Console.WriteLine("Counter: {0}", Counter(10));
         }

         private static int Counter(int iNum)
         {
                Console.WriteLine(iNum);
	
                if(iNum > 0)
                {
                       int dummy  = Counter(iNum - 1);
                }
                return 100 + iNum;
         }
      }	
}

// Edit von Alex: Bitte Code-Tags verwenden, danke.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück