#include #include // Global Variables can be invoked by any function int steps = 0; // Prototypes int fact(int n); void collatz (int n); int main(void) { // Fact int x = get_int("Fact of "); printf("fact of %i equals %i\n", x, fact(x)); // Collatz int y = get_int("Collatz of "); collatz(y); // counts steps printf("Collatz steps of %i: %i\n", y, steps); } // instead of a for loop int fact(int n) // works thanks to the execution stack { // base case if (n == 1) return 1; // last tab // recursive case else { return n * fact(n - 1); // close current tab but open a new one } } // in this function you accumulate the closed tabs, for instance, 3 * 2 * 1 void collatz (int n) // for counting number of steps { if (n < 1) { printf("Error: y must be bigger than zero\n"); return; // error } if (n == 1) // zero steps { return; // close tab } else if (n % 2 == 0) // remainder of n divided by 2 { steps++; // add a step collatz(n / 2); // open a simple tab } else { steps++; // add a step collatz (3 * n + 1); // open an advanced tab } return; // close simple or advanced tab }