JosefK
Πολύ δραστήριο μέλος
Ο Μιχαήλ αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Tatoo artist. Έχει γράψει 1,361 μηνύματα.
23-11-10
22:03
θέλω να πω ότι εφόσον δεν υπάρχει η δυνατότητα εισαγωγής ενός μοναδικού στοιχείου ή δύο στοιχείων τότε τα if που εξετάζουν το ενδεχόμενο εισαγωγής 1 ή 2 στοιχείων δεν χρησιμεύουν πουθενά.
Δυστυχώς δεν έχεις καταλάβει ακόμα τη λειτουργία μιας αναδρομικής συνάρτησης. Δεν καλείται μία φορά, καλείται πολλές φορές αναδρομικά. Αν πχ έχουμε αρχικά ένα πίνακα 50 στοιχείων, θα καλεστεί μία φορά με όρισμα ολόκληρο τον πίνακα, μετά θα σπάσει τον πίνακα στα 2 και θα καλεστεί 2 φορές για πίνακες 25 στοιχείων, μετά τον κάθε πίνακα 25 στοιχείων τον σπάει και καλέιται από 2 φορές με ορίσματα πίνακες 12 και 13 στοιχείων κ.ο.κ., μέχρι να φτάσει στα 1 ή 2 στοιχεία.
αυτό το κομμάτι του κώδικα με τα scanf/printf πρέπει να είναι μέσα στη main?
ναι
οι μεταβλητές που θα χρησιμοποιώ στην main πρέπει να ταυτίζονται με αυτά της εξωτερικής συνάρτησης?
Κάθε συνάρτηση χρησιμοποιεί τις δικές της, διαφορετικές μεταβλητές. Μία συνάρτηση μπορεί να περνάει σε μία άλλη ως όρισμα τις τιμές κάποιων μεταβλητών.
Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
JosefK
Πολύ δραστήριο μέλος
Ο Μιχαήλ αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Tatoo artist. Έχει γράψει 1,361 μηνύματα.
22-11-10
18:22
Η κυριότερη λύση είναι να σπασεις τον πίνακα στα 2 να κανεις αναζητηση μεγίστου σε κάθε έναν και έπειτα να συγκρίνεις τα 2 μέγιστα.. Αν θες αυτό είναι 5 min υπόθεση.. Το διαίρει και βασίλευε χρησιμοποιείται σε ταξινομήσεις πινάκων όπου δεν βρίσκει απλά μέγιστο αλλά ταξινομεί έναν πίνακα βλέπε Quick Sort, Merge Sort κτλ.. Για ποιο λόγο να κάνεις ταξινόμηση με διαίρει και βασίλευε απο τι στιγμή που θές απλά μέγιστο.. Πραγματικά Αν μπορείς δώσε την εκφώνηση δεν καταλαβαίνω πραγματικά τι ζητάς....
Μάλλον εννοεί μια αναδρομική συνάρτηση που σπάει τον πίνακα στη μέση και καλείται αναδρομικά, και όταν καλεστεί με πίνακα 2 στοιχεία τότε επιστρέφει το μέγιστο μεταξύ αυτών των 2, ή αν καλεστεί με πίνακα ενός στοιχείου επιστρέφει το στοιχείο αυτό.
Εντελώς βλακεία άσκηση, ούτε καν για εκπαιδευτικούς λόγους δεν αξίζει.
Code:
#include <stdio.h>
int maximum(int array[],int n)
{
int x,y;
if (n==1) return array[0];
else if (n==2)
{
if (array[0]> array[1]) return array[0];
else return array[1];
}
else
{
x=maximum(array,n/2);
y=maximum(array+n/2,n-n/2);
if (x>y) return x;
else return y;
}
}
int main()
{
int array[] = {3,0,1212,1,7,23,10,352175,27,12};
printf ("%d\n",maximum(array,10));
return 0;
}
Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.