eternx έγραψε:
Είχα μια απορία στον παρακάτω κώδικα.
def fact(n):
if n == 1:
return n
else:
return n * fact(n - 1)
Στην τελευταία γραμμή, το fact(n - 1) παύει να εκτελείται όταν φτάσει το 1; Είναι δηλαδή προκαθορισμένο όταν φτάσει το 1 να σταματάει;
Ναι, αφού εσύ το λες να σταματήσει όταν το n ισούται με 1.
Επίσης αν το n είναι μικρότερο του 1, τότε δεν θα συναντήσεις ποτέ το 1 και συνέχεια θα καλείς αναδρομικά την συνάρτηση (Infinity loop).
Πάρε για παράδειγμα για n = 3:
Κλήση 1: fact(3)
Είναι το
n == 1; (Όχι είναι 3) άρα
return 3 * fact(2)
Κλήση 2: fact(2)
Είναι το n == 1; (Όχι είναι 2) άρα
return 2 * fact(1)
Κλήση 3: fact(1)
Είναι το n == 1; (Ναι) άρα
return n
Επιστροφή από την κλήση 3 στην 2 (Η τρία επιστρέφει 1):
return 2 * fact(1) = return 2 * 1 = return 2
Επιστροφή από την κλήση 2 στην 1 (Η δύο επιστρέφει 2):
return 3 * fact(2) = 3 * 2 = return 6
Άρα τελικά το αποτέλεσμα είναι 6.