我想使用递归方法,但很难使其正常工作。
例如,在这个程序中,为什么当我显示b
时,值是0而不是10?
public static void main(String[] args) {
int a = 0;
int b = recursivMethod(a);
System.out.println(b);
}
static int recursivMethod(int a)
{
if(a != 10)
recursivMethod(a+1);
return a;
}
问题是,当递归调用方法时,不会返回该值。也就是说,您正确地调用了recursivMethod
,但随后立即返回a
的初始值。试试这个:
public static void main(String[] args) {
int a = 0;
int b = recursivMethod(a);
System.out.println(b);
}
static int recursivMethod(int a)
{
if(a != 10)
return recursivMethod(a+1); //here, you return the result of your recursive call
return a; //instead of just immediately returning a, which should only be done only after a == 10
}
两点:
-
当你的方法递归地调用自己时,它会忽略返回的值:
if(a != 10) recursivMethod(a+1); // <--- did you mean to do something with the result?
-
由于
recursivMethod()
不改变a
,并且在最后返回a
,因此调用recursivMethod(0)
将返回0
。这正是运行代码时发生的情况。
这是因为您忽略了递归调用的返回值:
static int recursivMethod(int a) {
if(a != 10)
return recursivMethod(a+1);
return a;
}
尝试
return recursiveMethod(a+1);
而
您从未为方法局部变量a
分配新值
尝试:
public static void main(String[] args) {
int a = 0;
int b = recursivMethod(a);
System.out.println(b);
}
static int recursivMethod(int a)
{
if(a != 10)
a = recursivMethod(a+1);
return a;
}
您正在丢弃递归调用的结果。
static int recursivMethod(int a)
{
if(a != 10)
return recursivMethod(a+1); // Note the return
return a;
}
static int recursivMethod(int a)
{
if(a != 10)
return recursivMethod(a+1);
}
缺少返回:
return recursivMethod(a+1);