sataan1337 - Do 27.11.08 19:53
Titel: stack overflow exception in rekursiver prozedur
moin ;)
ich bin neu in c# und hab ein kleines problem ;)
ich wollte mir aus spass ein kleines programm basteln dass die größenbegrenzung für integer-werte umgeht
in ein array schreib ich dafür in array[0] den startwert, verändere ihn (in dem fall quadriert), dann überprüfe ich die grösse und schreibe das ergebnis der ganzzahldivision durch 1000000 ins nächst höhere feld und ersetzte den wert in array[0] durchs modulo
(sry im erklären von sowas bin ich ne niete ich häng mal am ende den quellcode an)
zur ausgabe wollte ich mir jetzt ne rekursive prozedur schreiben die mir die werte von array[99] bis array[0] aneinanderkettet - jeweils mit nem leerzeichen dazwischen
wenn ich das ganze jetzt ausführe krieg ich beim ersten aufruf der "ausgabe"-funktion innerhalb der "ausgabe"- funktion diese "stack overflow exception" ;)
vielleicht hat ja einer von euch ne idee was da nich stimmen könnte ;) thx im voraus
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63:
| using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics;
namespace ConsoleApplication3 { class Program { public static void Main(string[] args) { int max = 100; int pos = 0; int[] blub = new int[max]; blub[0] = 1; while (1 == 1) { pos = position(pos, max, blub); for (int i = 0; i <= pos; i++) { blub[i] = blub[i] + blub[i]; if (blub[i] > 999999) { if (i < 99) { blub[i + 1] = blub[i + 1] + (blub[i] / 1000000); blub[i] = blub[i] % 1000000; } } } Console.WriteLine(ausgabe(99, blub)); System.Threading.Thread.Sleep(50); } }
static string ausgabe(int i, int[] blub) { if (i == 0) { return (Convert.ToString(blub[i])); } string sülz = ausgabe(i--, blub); string blah = Convert.ToString(blub[i]); return (blah + " " + sülz); }
static int position(int pos, int max, int[] blub) { for (int i = (max - 1); i >= pos; i--) { if (blub[i] != 0) { return (i); } } return (-1); } } } |
*edit:
habs mal in java probiert da kommt das gleiche ;) also irgendwas muss ich übersehen haben ^^
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Kha - Do 27.11.08 20:24
Titel: Re: stack overflow exception in rekursiver prozedur
sataan1337 hat folgendes geschrieben : |
(sry im erklären von sowas bin ich ne niete ich häng mal am ende den quellcode an) |
Keine Sorge, habs verstanden :D .
Schau dir mal im Debugger nach jedem Rekursionsschritt den Wert von i an und überlege dir nochmal den Unterschied zwischen Präinkrement- (++i) und Postinkrement-Operatoren (i++) ;) .