Answer:
Here is the program:
#include <iostream> //to use input output functions
#include <string> // to use functions to manipulate strings
using namespace std; //to identify objects cin cout
void function(string prefix, unsigned int levels){ // function that takes two parameters, a string, using the string class and levels an unsigned integer
if (levels == 0) { //if number of levels is equal to 0
cout << prefix << endl; //displays the value of prefix
return; }
for (int i = 1; i <=9 ; i++){ //iterates 1 through 9 times
string sections = (levels == 1 ? "" : "."); //if the number of levels is equal to 1 then empty space in sections variable otherwise stores a dot
string output = prefix + std::to_string(i) + sections;
// displays the string prefix followed by the section numbers. Here to_string is used to convert integer to string
function(output, levels - 1); } }
//calls function by passing the resultant string and levels-1 recursively to print the string prefix followed by section numbers
int main() { // start of main function
int level = 2; //determines the number of levels
function("BOX", level); } //calls function by passing the string prefix and level value
Explanation:
The program has a function named function() that takes two parameters, prefix (a string, using the string class from ) and levels (an unsigned integer). The function prints the string prefix followed by "section numbers" of the form 1.1., 1.2., 1.3., and so on. The levels argument determines how many levels the section numbers have. If the value of levels is 0 means there is 0 level then the value of prefix is printed. The for loop iterates '1' through '9' times for number of digits in each level. If the number of levels is 1 then space is printed otherwise a dot is printed. The function() calls itself recursively to print the prefix string followed by section numbers.
Let us suppose that prefix = "BOX" and level = 1
If level = 1 then the loop for (int i = 1; i <=9 ; i++) works as follows:
At first iteration:
i = 1
i <=9 is true because value of i is 1
string sections = (levels == 1 ? "" : "."); this statement checks if the levels is equal to 1. It is true so empty space is stored in sections variable so,
sections = ""
Next, string output = prefix + std::to_string(i) + sections; statement has prefix i.e BOX plus value of i which is 1 and this int value is converted to string by to_string() method plus sections has an empty space. So this statement becomes
string output = BOX + 1
So this concatenates BOX with 1 hence output becomes:
output = BOX1
At second iteration:
i = 2
i <=9 is true because value of i is 2
string sections = (levels == 1 ? "" : "."); is true so
sections = ""
Next, string output = prefix + std::to_string(i) + sections; statement becomes
string output = BOX + 2
So this concatenates BOX with 1 hence output becomes:
output = BOX2
At third iteration:
i = 3
i <=9 is true because value of i is 3
string sections = (levels == 1 ? "" : "."); is true so
sections = ""
Next, string output = prefix + std::to_string(i) + sections; statement becomes
string output = BOX + 3
So this concatenates BOX with 1 hence output becomes:
output = BOX3
Now at each iteration the prefix string BOX is concatenated and printed along with the value of i. So at last iteration:
At last iteration:
i = 9
i ==9 is true because value of i is 9
string sections = (levels == 1 ? "" : "."); is true so
sections = ""
Next, string output = prefix + std::to_string(i) + sections; statement becomes
string output = BOX + 9
So this concatenates BOX with 1 hence output becomes:
output = BOX9
After this the loop breaks at i = 10 because the condition i<=9 becomes false. So the output of the entire program is:
BOX1 BOX2 BOX3 BOX4 BOX5 BOX6 BOX7 BOX8 BOX9
The program along with the output is attached.