Question 3: modify a program (recursion, loops) [6]
Re-write functions f and g in the program below so that
(i) function f uses a loop instead of recursion to carry out its error checking/re-prompt cycle, and
(ii) function g uses recursion instead of a loop to display the countdown.
#include <cstdio> int f(); void g(int n); int main() { int counter = f(); g(counter); } void g(int n) { while (n > 1) { printf("%d\n", n); n = n - 2; } } int f() { int val, numRead; printf("Please enter an odd integer\n"); numRead = scanf("%d", &val); if ((numRead == 0) || ((val % 2) == 0)) { printf("Incorrect, try again\n"); if (numRead == 0) { scanf("%*s"); } val = f(); } return val; } |
Sample solution: void g(int n) { if (n > 1) { printf("%d\n", n); g(n-2); } } int f() { int val, numRead; do { printf("Please enter an odd integer\n"); numRead = scanf("%d", &val); if ((numRead == 0) || ((val % 2) == 0)) { printf("Incorrect, try again\n"); if (numRead == 0) { scanf("%*s"); } } } while ((numRead == 0) || ((val % 2) == 0)); return val; } |