Java 递归函数中的全局变量如何保持为零?
因此,如果我有一个带有全局变量var的递归函数:Java 递归函数中的全局变量如何保持为零?,java,recursion,Java,Recursion,因此,如果我有一个带有全局变量var的递归函数: int var_; void foo() { if(var_ == 3) return; else var_++; foo(); } 然后我有一个调用foo()的函数,所以: 每次调用foo时设置var_uz=0的最佳方法是什么?这不是从内部进行的。我知道我可以做到: void bar() { var_ =0; foo(); return; } 但是我经常使用递归函数,我不想调用foo而忘记在以后设置va
int var_;
void foo()
{
if(var_ == 3)
return;
else
var_++; foo();
}
然后我有一个调用foo()的函数,所以:
每次调用foo时设置var_uz=0的最佳方法是什么?这不是从内部进行的。我知道我可以做到:
void bar()
{
var_ =0;
foo();
return;
}
但是我经常使用递归函数,我不想调用foo而忘记在以后设置var_uz=0
有人对如何解决这个问题有什么建议吗
谢谢,Josh将foo()
转换为助手函数
void foo() {
var_ = 0;
foo_helper();
}
void foo_helper() {
if(var_ == 3)
return;
else
var_++; foo_helper();
}
您不必更改任何现有代码,您仍然可以调用foo()
,让它工作。我将foo()
拆分为初始化函数和真正的递归函数:
void foo()
{
var_ = 0;
foo_recur();
}
void foo_recur()
{
if(var_ == 3)
return;
else
var_++; foo_recur();
}
要添加到您得到的前两个(惊人相似的)答案中,请仅使foo()方法在类外部可见,并将foo_helper()/foo_recur()保持为私有(var_u也应为私有)。如果要在多线程环境中使用,还应该使foo()同步
另外,最好将“var”称为实例变量或类变量(而不是“全局变量”)。您真的需要这个全局变量吗 如果它只用于控制递归的深度,您可以用更优雅的方式重写它,如下所示:
void foo() {
fooHelper(0);
}
void fooHelper(int var) {
if (var == 3) return;
else fooHelper(var + 1);
}
要让函数知道它是否是从自身内部调用的,可以添加一个参数:
int var_;
void foo(boolean from_itself)
{
if(!from_itself)
var_ = 0;
if(var_ == 3)
return;
else
var_++; foo(true); // from within itself
}
void bar()
{
foo(false); // not from within itself
return;
}
因此,这种方法不需要添加帮助函数。感谢您的输入,这也是我的想法,但我想知道是否有更优雅的解决方案。感谢您的输入,但变量不是控制深度,我需要它来匹配特定节点和xml结构。建议总是很好的。我不确定他的要求,所以我不确定它们是否合适,但它们都是值得注意的好东西+1.
void foo() {
var_ = 0;
foo_helper();
}
void foo_helper() {
if(var_ == 3)
return;
else
var_++; foo_helper();
}