PDA

View Full Version : Αναδρομη στην C


Alarm
11-03-2005, 13:30
Καλησπερα.
Προσπαθω να λυσω μια δικη μου ασκηση, ανεπιτυχως ομως.

Το προγραμμα θελω να προσθετει το

0
0+1
0+1+2
0+1+2+3

Και να επιστρεφει το αποτελεσμα 10 , σε περιπτωση που η μεταβλητη num=3.
Αυτο καταφερα να το λυσω με for loop.
sum = 0;
for(i=0; i<=num; i++)
for(j=0; j<=i; j++)
sum = sum + j;

Με αναδρομη εβγαλα τον τυπο return sira(num-1) + num , οπου προσθαιτει την σειρα αριθμων απο το 0 εως το num.

Σκευτηκα για να βαλω την sira μεσα στην sira αλλα μετα απο δοκιμες ειδα οτι δεν βγαζει το σωστο αποτελεσμα. Για πειτε καμια ιδεα για το πως το παραπανω προβλημα λυνεται με αναδρομη.

ΥΓ. Ο αριθμος εισαγωγης θα ειναι παντα θετικος.

DarthMoul
11-03-2005, 13:55
Με το num=3 δεν θα πρέπει να επιστρέφει 6;
1+2+3=6

Αυτό σου κάνει;

void seira(int n, int *sum)
{
*sum += n;
n--;
if (n != 0)
seira(n, sum);
}

main()
{
int sum = 0;
seira(3, &sum);
printf("\n %d", sum);
}

DarthMoul
11-03-2005, 14:14
Αυτό ίσως;

int seira(int n, int sum)
{
if (n == 0)
return sum;
sum += n;
n --;
seira(n, sum);
}


main()
{
int sum=0;
printf("\n %d \n", seira(3,sum));
}

Alarm
15-03-2005, 13:26
Αδελφε και το ενα και το αλλο προγραμμα που εγραψες κανουν το εξης.
0+1+2+3+..+η
Κατι το οποιο εχω καταφερει να κανω με αναδρομη. return sira(num-1) + num

Αυτο που θελω να γινεται με αναδρομη ειναι αυτο που εγραψα παραπανω με το for.
Δηλαδη να προσθετει το εξης.

0 = 0
0+1 = 1
0+1+2 = 3
0+1+2+3 = 4
Αποτελεσμα = 10.

Ελπιζω να βρεθει μια λυση, μου εχει σπασει το κεφαλι αυτο :)

DarthMoul
15-03-2005, 13:49
int seira(int n, int sum)
{
int k;
if (n == 0)
return sum;
k = n;
while (k > 0)
{
sum += k;
k--;
}
n --;
seira(n, sum);
}


main()
{
int sum=0;
printf("\n %d \n", seira(3,sum));
}

Alarm
04-04-2005, 21:27
danke . επιασε. Αυτο ζητουσα
να εισαι καλα αδελφε,