Sep 19, 2022 at 11:29am Sep 19, 2022 at 11:29am UTC
It should countdown as in
3
2
1
0
Sep 19, 2022 at 11:32am Sep 19, 2022 at 11:32am UTC
print the current number before calling the function recursively with decremented value.
Edit: You've already done this.
Calling counter(3)
Calling counter(2)
Calling counter(1)
counter(0) processed
counter(1) processed
counter(2) processed
Remove the "processed" print statements, and then add a print statement in the base case for 0.
PS: Even a simple program like yours is hard to read when you don't use proper indentation.
Last edited on Sep 19, 2022 at 11:34am Sep 19, 2022 at 11:34am UTC
Sep 19, 2022 at 12:42pm Sep 19, 2022 at 12:42pm UTC
I don't know what I have to think about recursive functions. Even if it works as expected, I guess that it could be better to use a loop no? At first, it takes a lot of stack space compared to an iterative program. Second fact, it uses more processor time... In this example, I would have formulated the code in different way. After some tests, recursives functions seem to me unclever and irrelevant. Loops do/while and for++ have a better execution time :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#include <iostream>
#include <chrono>
void count(int counter)
{
std::cout << "Calling counter(" << counter << ")" << std::endl;
if (counter > 0)
count(--counter);
}
int main()
{
auto start = std::chrono::high_resolution_clock::now();
int i = 1000;
count(i);
auto stop = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(stop - start);
std::cout << "execution time : " << duration.count() << std::endl;
return 0;
}
Calling counter(1000)
Calling counter(999)
Calling counter(998)
(...)
execution time : 108420
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#include <iostream>
#include <chrono>
void count(int i)
{
std::cout << "Calling counter(" << i << ")" << std::endl;
}
int main()
{
auto start = std::chrono::high_resolution_clock::now();
for (int i = 1000; i >= 0; --i)
count(i);
auto stop = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(stop - start);
std::cout << "execution time : " << duration.count() << std::endl;
return 0;
}
Calling counter(1000)
Calling counter(999)
Calling counter(998)
(...)
execution time : 53940
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#include <iostream>
#include <chrono>
void count(int i)
{
std::cout << "Calling counter(" << i << ")" << std::endl;
}
int main()
{
auto start = std::chrono::high_resolution_clock::now();
int i = 1000;
do {
count(i);
--i;
} while (i >= 0);
auto stop = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(stop - start);
std::cout << "execution time : " << duration.count() << std::endl;
return 0;
}
Calling counter(1000)
Calling counter(999)
Calling counter(998)
(...)
execution time : 57840
Last edited on Sep 19, 2022 at 3:18pm Sep 19, 2022 at 3:18pm UTC