我有一個帶有靜態變量「count」的遞歸函數。該函數遞歸遞增計數,因爲它有文件範圍,當我第二次調用foo()時,count仍然等於5.是否有一種技術在第二次調用foo()之前將count重置爲0?具有靜態變量的遞歸函數
基本上,我不希望計數有文件範圍,但我希望它通過不同的迭代保留其價值。
我能想到的一種方法是在foo()中有一個參數來初始化foo()。如foo(int count)。但還有另一種方式嗎?
#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;
}
是否有一個特定的原因,你使用靜態計數,而不是將它作爲參數傳遞?在像這樣的遞歸函數中使用靜態變量通常被認爲是一個壞主意,正是因爲這樣的事情。 – 2009-08-22 19:33:43
靜態無特殊原因。從下面的答案中,我會同意一個論點將是最好的方式去做這件事。 – Steve 2009-08-22 21:33:54