InDiO Δημοσ. 21 Οκτωβρίου 2002 Δημοσ. 21 Οκτωβρίου 2002 Εχουμε τις κλάσεις που ακολουθούν. </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">public class test1 { public int recurse(int i) { i++; if (i<=5) recurse(i); System.out.println("NOT TO BE PRINTED, but i= "+i); return i; } } public class s { public static void main(String[] args) { test1 w=new test1(); w.recurse(5); } }[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">Θέλοντας να προβλέψω τι θα βγάλει η αναδρομή αυτή, λέω... Καλούμε την recurse για 0. το i γίνεται 1 και εφόσον η συνθήκη ικανοποιείται, ξανακαλείται η recurse αναδρομικά το i γινεται 2 και ούτω καθεξής...Όπως έχω καταλάβει εγώ τα πραγματα, το println δεν θα τυπωθεί πάνω από μια φορά. Σωστό ή λάθος;;; Περιττο να πω ότι τα αποτελέσματα είναι εντελώς αντιθετα. Τι δεν έχω καταλάβει σωστά στις αναδρομικές κλήσεις συναρτήσεων στην Java;;; Ας μου απαντήσει κάποιος γιατί ο χρόνος με πνίγει... ΕΥΧΑΡΙΣΤΏ Κ ΠΑΛΙ! <img border="0" title="" alt="[Razz]" src="images/icons/tongue.gif" />
apoc Δημοσ. 21 Οκτωβρίου 2002 Δημοσ. 21 Οκτωβρίου 2002 O κωδικας κανει αυτο ακριβως που του λες... με αλλα λογια η συμπεριφορα ειναι λογικη. Η αναδρομη ειναι σωστη , απλα πρεπει να προσεξεις οτι καθε που φορα που καλεις την μεθοδο , αυτη με καποιο τροπο θα πρεπει να ολοκληρωσει ολη την σειρα των πραγματων που πρεπει να κανεις. Στον κωδικα σου πρωτα καλεις την αναδρομη και στην συνεχεια print , οποτε ο υπολογιστης θα φτασει στο recurse(5) θα αποτυχει η συνθηκη και θα printarei μυνημα , βεβαια μετα θα επιστρεψει για να εκτελεσει το επομενο βημα αφου επεστρεψε η recurse(5) που ειναι να printarei to μυνημα.Tο ιδιο γινεται για ολα τα προηγουμενα i .
Γηρυόνης Δημοσ. 21 Οκτωβρίου 2002 Δημοσ. 21 Οκτωβρίου 2002 Ποιό είναι το πρόβλημα; Το println πρέπει να τυπωθεί όταν το i είναι μεγαλύτερο ή ίσο του 5 και τότε η μέθοδος θα τελειώσει αφού θα επιστρέψεις μία τιμή.
HdkiLLeR Δημοσ. 21 Οκτωβρίου 2002 Δημοσ. 21 Οκτωβρίου 2002 Vasika to block toy if einai to parakatw? </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> i++; if (i<=5) { recurse(i); } System.out.println("NOT TO BE PRINTED, but i= "+i); return i;[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">Stin main kaleis tin recurse toy adikeimenou w pernodas tin ton akeraio 5.Opote to 5 ginete 5++=6 kai i sinthiki den ikanopoieite.Gia na kaneis vasika auto pou les ean kai pali exw katalavei swsta o kwdikas sou einai </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">public class test1 { public void recurse(int i) { i++; if (i<=5) { recurse(i); } System.out.println("NOT TO BE PRINTED, but i= "+i); }//end recurce }//end class public class s { public static void main(String[] args) { test1 w=new test1(); w.recurse(0); }//end main }//end class[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">Enaka tin recurce void giati den einai anagi na epistrefei kati.Kai dinw arxiki timi stin recurce to 0.Auto tha ginei 1 tha xanakalestei tha ginei 2 klp mexri na ginei 6 opote tha stamatisei i anadromi.Gia na katalaveis kalitera tin anadromi prospathise na ftiaxeis ena anadromiko prog gia ton ipologismo toy paragodikou enos arithmou.px </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> public class paragon_anadromiki { static long paragon (long n) { long result; if (n <= 1)//ean to n=1 i n=1 tote to n! einai1 { return 1; } else { result = n*paragon(n-1); } return result; } public static void main (String args[]) { long n = Long.parseLong(args[0]); long result = paragon(n); System.out.println(); System.out.println("Paragodiko tou:"+n+"="+result); } }[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">Auta kai pisteuw na voithisa <small>[ 21-10-2002, 16:15: Το μήνυμα επεξεργάστηκε από: HdkiLLeR ]</small>
InDiO Δημοσ. 22 Οκτωβρίου 2002 Μέλος Δημοσ. 22 Οκτωβρίου 2002 H sosti main einai ayti(gmt) apla ekei pou leei recurse(5) ithela na valo 0. </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">public class s { public static void main(String[] args) { test1 w=new test1(); w.recurse(0); } }[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">Trexontas ayto tin main, painroume ta eksis NOT TO BE PRINTED, but i= 6 NOT TO BE PRINTED, but i= 5 NOT TO BE PRINTED, but i= 4 NOT TO BE PRINTED, but i= 3 NOT TO BE PRINTED, but i= 2 NOT TO BE PRINTED, but i= 1 Press any key to continue . . . Opos exo katalavei ego tin anadromi, mia anadromiki synartisi , EPISTREFEI tin stigmi pou ginetai klisi ston eayto tis! Den sinexizei tin ektelesi tis molis epistrefei i synartisi-paidi. DILADI stin periptosi ayti tha eprepe na emfanizetai MONO mia fora to print! Ayti i symperifora mou thymizei entona tin symperifora enos Thread... Exo katalavei lathos? Pos mporo na stamatao tin synexisi tis synartisis pateras, xoris na epireazo ta paidia?Vevaia, me aytin tin logiki, an tin kano na epistrefei (return -1) meta tin anadromiki klisi, tha pairno panta to apotelesma -1, aneksartitos ti tha epistrepsei kapoia anadromiki klisi tis method!!! Elpizo na katalavate to provlima mou. To provlima emfanistike me tin ylopoiisi enos searching algorithmou, tou Binary Interpolation Search me riza N vimata. Katarxin o algorithmos prepei na epistrefei int, tin timi tou index. Yparxoun 2 synthikes mesa ston algorithmo. Gia tin proti kanoume recursive call sto subfile(position,position-rootN) kai gia tin deyteri (position+rootN,position). An i synartisi pateras, synexizei na ekteleitai kai pera apo to simeio tis anadromikis klisis, tote exo ena Megalo keno stin katanoisi+ena megalo poulo ston algorithmo <img border="0" title="" alt="[big Grin]" src="images/icons/grin.gif" /> <img border="0" title="" alt="[Razz]" src="images/icons/tongue.gif" /> <img border="0" title="" alt="[big Grin]" src="images/icons/grin.gif" /> ... Any ideas? <small>[ 21-10-2002, 17:37: Το μήνυμα επεξεργάστηκε από: InDiO ]</small>
Γηρυόνης Δημοσ. 22 Οκτωβρίου 2002 Δημοσ. 22 Οκτωβρίου 2002 Κάθε άλλο παρά παράξενο είναι τότε. Κακός υπολογισμός ή μη-πλήρη κατανόηση του πως δουλέυει η αναδρομή. Αυτό που κάνεις είναι ότι *δεν επιστρέφεις* τιμή, απλώς *καλείς* τη μέθοδό σου. Είναι ένα πολύ κοινό πρόβλημα, όλοι έχουμε περάσει από εκεί. Το πρόβλημά σου λύνεται όταν *επιστρέψεις* την τιμή στη μέθοδό σου. ʼλλαξε τη σειρά </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">if (i<=5) recurse(i);[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">και κάνε την </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">if (i<=5) { return recurse(i); }[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">Ελπίζω να είναι αυτό που ζητάς.
InDiO Δημοσ. 22 Οκτωβρίου 2002 Μέλος Δημοσ. 22 Οκτωβρίου 2002 Thanks man...Αν σου έδινα 10Ε για καθε βοήθεια μου έχεις δώσει, θα ήσουνα πλούσιος <img border="0" title="" alt="[Razz]" src="images/icons/tongue.gif" /> <img border="0" title="" alt="[Razz]" src="images/icons/tongue.gif" /> Κατάλαβα αυτό που λες, και κατάλαβα ότι δεν το είχα σωστά στο μυαλό μου! Οι αναδρομές γενικώς υποτίθεται οτι είναι μια "κακή-όχι βελτιστοποιημένη" προσσέγγιση; Δηλαδή είναι καλύτερη η τελική υλοποίση του αλγορίθμου να είναι iterative;
apoc Δημοσ. 22 Οκτωβρίου 2002 Δημοσ. 22 Οκτωβρίου 2002 Φιλε Indio μια και ειχε αυτο προβλημα , αλλα και ασχολεισαι..με τετοια θεματα θελω να τονισω την σημαντικοτητα του debugging μεσα απο τναν proper και καλο debugger.Δεν ξερω πιο περιβαλλον χρησιμοποιεις για την δουλεια σου , αλλα μπορεις να αποφυγεις αλλα και να κατανοησεις πολλα τετοια προβληματα με το να κανεις step by step debugging μεσα απο το εργαλειο αναπτυξης σου... Δεν εχεις κανενα? http://www.netbeans.org http://www.eclipse.org Φιλικα!
InDiO Δημοσ. 22 Οκτωβρίου 2002 Μέλος Δημοσ. 22 Οκτωβρίου 2002 File APOC se katalava. Prospatheis na ksefortotheis emena kai tis erotiseis mou me ayta ta ftina kolpa! Eisai gelasmenos! XE! Plaka kano. Isos kai na exeis dikio gia to perivallon. Apla to thema einai oti prokeitai mono gia project tis sxolis mou (vlepe sig). Diladi oxi megalepivola pragmata. Giayto kai xrisimopoio Textpad. Variomouna na kathomai na asxoloumai kai me ola ta lathi pou tha mou evgaze ena olokliromeno IDE(ftiakse project, workspace kai tetoia). Tha to psakso ligo me link sou. thnx
apoc Δημοσ. 22 Οκτωβρίου 2002 Δημοσ. 22 Οκτωβρίου 2002 Χεχε καποτε και εγω ημουν με το textpad και αλλα , αλλα με τον καιρο καταλαβα οτι το μεγαλυτερο οπλο εναντια στα Bugs ..αλλα και στις αλγοριθμικες βλακειες τις δικες μου....ηταν το debug !!XEXEX
Γηρυόνης Δημοσ. 29 Οκτωβρίου 2002 Δημοσ. 29 Οκτωβρίου 2002 Χεχεχε, μόλις το διάβασα κάπου πριν από λίγο. Η καλύτερη λύση λέει για την αποσφαλμάτωση προγραμμάτων είναι το System.out.println(). Καλό.
Επισκέπτης Δημοσ. 30 Οκτωβρίου 2002 Δημοσ. 30 Οκτωβρίου 2002 Mallon egw 8a eixa grapsei <img border="0" title="" alt="[Razz]" src="images/icons/tongue.gif" /> Einai pagia taktikh mou gia debugging <img border="0" title="" alt="[Wink]" src="images/icons/wink.gif" /> E3allou textpad rulez, ektos pia kai an 8eleis na ftia3eis GUI, opote to ftiaxneis me kapoio IDE kai meta pairneis ton kwdika kai ton prosarmozeis stis anagkes sou, kanontas ton mikrotero polles fores, ka8ws ta IDEs exoun to kako ellatwma na dhmiourgoun kwdika pou de xreiazetai. Keep programming in Java <img border="0" title="" alt="[Wink]" src="images/icons/wink.gif" /> Filika Dionisos
apoc Δημοσ. 30 Οκτωβρίου 2002 Δημοσ. 30 Οκτωβρίου 2002 Dionisos διαφωνω , εχω πεισθει οτι αν θελεις να ολοκηρωσεις ενα αρκετα μεγαλο task , που περιλαμβανει καποια υλοποιηση τοτε οι advanced editors ειναι 'λιγοι' για να σου κανουν την δουελεια..γιατι το λεω αυτο! Το IDE θα σου δωσει τα εξης: Ευκολιες του στυλ code completion (Μεγαλη δουλεια) Αυτοματισμο στην δημιουργια documentation (Μια μιρκη βοηθεια στο javadoc) Εργαλεια που θα μπορουν να μιλανε με καποιο συστημα οως το CVS ή το VSS , οταν μιλαμε για πολλα ατομα σε ενα project Και θελεις version control. Prοper debugging facilities! Make tools, dependecy checkers κτλ κλτ βοηθητικα εργαλεια για σχεδιασμο και αναλυση πολλα IDE φερουν UML editors κτλ κτλ . Φυσικα καποιο στοιχειωδες support εξαιτιας καποια μεγαλης και οργανωμενη κοινοτητας developer . Η μονη αξιολογη alternative λυση σε ολα αυτα...αν καποιος πραγματικα δεν θελει να δουλεψει ενα IDE ..ακουει στο ονομα Ant.Το πολυ εργαλειο του Java και οχι μονο programmer!Κατι αντιστοιχο του make! Αν λοιπον χρησιμοποιειτε εναν απλο editor απο την αλλη θελετε καποιου ειδους αυτοματισμο..το ant θα κανει την δουλεια γρηγορα για εσας.Ειναι παραμετροποιησιμο μεσα απο απλα ΧΜΛ αρχεια.. Για ολους τους αλλους www.netbeans.org www.eclipse.org ή αντε στην χειροτερη Jbuilder (αχ αυτη η μαμημενη η συνηθεια τι σου κανει) χεχεχχε
Γηρυόνης Δημοσ. 30 Οκτωβρίου 2002 Δημοσ. 30 Οκτωβρίου 2002 Να σας πω τον πόνο μου παιδιά και εγώ της System.out.pritnln() είμαι πιο πολύ. Όχι ότι δε χρησιμοποιώ διάφορα εργαλεία αλλά πάντα στο τέλος βρίσκω τον εαυτό μου να ξεφεύγει από τα χαρακτηριστικά των IDE και να γυρνάει σε πιο "πατροπαράδοτα" ]
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.