Ισώς να κανεις μια συναρτηση με for loop που θα κανει αναδρομη (recursion)?
(και με vectors που είναι ενα είδος array με μεταβλητό μέγεθος:)
// πρέπει να συμπεριλάβεις τη βιβλιοθήκη
#include <vector>
#include <iostream>
// Απλά μια συναρτηση που δέχεται τους i,j,k... και ο αριθμός των επαναλήψεων κάθε for
void doSomething(std::vector<int> indexes)
{
// πχ τύπωσε κάθε index: i,j,k,...
for (int i = 0; i < indexes.size(); i++)
{
std::cout << indexes[i] << ' ';
}
std::cout << std::endl;
}
int someNumber = 9;
// η συνάρτηση που θα κανει for loops και αναδρομή (το super στο όνομα προέρχεται από τη super power ^^ που ο ζάχος εξήγησε σε διάλεξη...
void superForLoop(int numberOfForLoopsToGo, std::vector<int> indexes)
{
// Αν έχουμε φθάσει στο numberOfForLoopsToGo = 0 τότε αρκεί να επιστρέψουμε την τιμή της doSomething:
if ( numberOfForLoopsToGo == 0 ) doSomething(indexes);
else { // Αλλιώς κάνε άλλο ενα loop:
for (int i = 0; i < someNumber; i++)
{
// αντέγραψε τη λιστα με τα indexes και πρόσθεσε τον νεο index για να τη παραδώσεις στην αναδρομή:
std::vector<int> updatedIndexes = indexes;
updatedIndexes.push_back( i );
superForLoop( numberOfForLoopsToGo - 1, updatedIndexes);
}
}
}
int main()
{
superForLoop(3, std::vector<int> {}); // θα κάνει for loops με βαθος 5. Του δίνω μια αδεια vector γιατι αλλιως δεν....
}
To πρόγραμμα αυτο (δουλευει κανε copy paste) τωρα κάνει 3 nested for loops και το κάθε for loop εκτελείτε 10 φορές.
Αρα η doSomething που τυπώνει στο τέλος 3ου for τα indexes καθε for loop θα τυπώσει ουσιαστικα όλους τους αριθμούς απο 0 μέχρι και 999. tah dah
Ελπίζω να πάρω αρκετούς πόντους. μου πήρε πολύ ωρα να γράφω σε makrdown αυτο το προγραμμα...
επίσης είναι κακή ιδέα να χρησιμοποιήσεις κάτι τέτοιο μάλλον...