I have a recursive function with a static variable "count". The function increments count recursively and since it has file scope, when I call foo() a second time, count is still equal to 5. Is there a technique to reset count to 0 before the second time foo() is called?
Basically, I don't want count to have file scope but I want it to retain its value through different iterations.
One way I can think of doing it is have an argument in foo() to initialize foo(). Such as foo(int count). But is there another way?
#include <iostream>
using namespace std;
void foo()
{
static int count = 0;
if(count<5)
{
count++;
cout<<count<<endl;
foo();
}
else
{
cout<<"count > 5"<<endl;
}
}
int main()
{
foo(); //increment count from 0 to 5
foo(); //count is already at 5
return 0;
}
No need to declare two function or use static variable. You could use default arguments.
Put it in the else
If you want to recursion properly check out waxwing's answer.
You can change foo to accept a boolean variable which means reset or not.
call foo() as before, or foo(true), if you want to reset it.
How about this
A more idiomatic way is to split it into two functions:
Which has the benefit of not requiring the caller to supply an argument to
foo()
and also you don't need a static variable (which I always feel is a bad idea).You can make the function auto-resetting this way:
Saves boilerplate code.