/* * assignment number: 3 * author: han * course: Computer Science II * description: * due: 2007-10-15 * file: /home/hanumizzle/c++/recursion.cpp * time: 5:30-7:20 */ #include #include using namespace std; void manipulate_lightbulbs(vector , int); void show_lightbulbs(vector ); int main() { vector bulbs(10, false); manipulate_lightbulbs(bulbs, 0); } // Recursive function that iterates over the lightbulb and vector and toggles // them according to the the current interval void manipulate_lightbulbs(vector bulbs, int interval) { // Interval zero is special-cased; no switching occurs. Otherwise run through // and toggle the lightbulbs if (interval > 0) { // Starting at n, every nth bulb for (int i = interval - 1; i < bulbs.size(); i += interval) { bulbs[i] = !bulbs[i]; // On if off; off if on } } // Only recurse if current interval is less than length of vector. e.g., ten // light bulbs means ten iterations:w if (interval < bulbs.size()) manipulate_lightbulbs(bulbs, interval + 1); // Print out configuration *after* recursion; instances printed out in // reverse order, n, n - 1, n - 2, ... 0 cout << "At position " << interval << ":\t"; show_lightbulbs(bulbs); } void show_lightbulbs(vector bulbs) { // Outputs a cutesy string that looks like [X..X..XX.X]. Light bulbs that // are on are 'X's; '.' for off. cout << '['; for (int i = 0; i < bulbs.size(); i++) { cout << (bulbs[i] ? 'X' : '.'); } cout << ']' << endl; }