如何在java中跟踪基本递归代码
我不熟悉递归,不了解它是如何工作的 这是一个课堂作业问题,答案是18,但我不明白怎么回答。据我所知,这应该返回递归行上的6+5+4+3+m-1 减法符号不表示减法吗?假设m=5如何在java中跟踪基本递归代码,java,recursion,Java,Recursion,我不熟悉递归,不了解它是如何工作的 这是一个课堂作业问题,答案是18,但我不明白怎么回答。据我所知,这应该返回递归行上的6+5+4+3+m-1 减法符号不表示减法吗?假设m=5 public int test(int m) { int value; if (m == 0) value = 3; else value = test(m - 1) + 3; return value; } 递归线上的6+5+4+3+m-1?这是减法吗 不表示减法的符号
public int test(int m)
{
int value;
if (m == 0)
value = 3;
else
value = test(m - 1) + 3;
return value;
}
递归线上的6+5+4+3+m-1?这是减法吗
不表示减法的符号
不,每个递归调用都会发生+3,实际上函数的值是m乘以3+3
因此,对于m=5,递归调用如下所示:
m=0吗?不,所以让我们递归地调用:
测试4+3
m=4;然后测试3+3+3
m=3;然后测试2+3+3+3
m=2;然后测试1+3+3+3+3
m=1;然后测试0+3+3+3+3+3+3
m=0;然后以3+3+3+3+3+3+3退出
因此,对于m=5,得到18
一个旁注,您可以使用简化方法:
static public int test(int m) {
return (m == 0) ? 3 : test(m - 1) + 3;
}
递归线上的6+5+4+3+m-1?这是减法吗
不表示减法的符号
不,每个递归调用都会发生+3,实际上函数的值是m乘以3+3
因此,对于m=5,递归调用如下所示:
m=0吗?不,所以让我们递归地调用:
测试4+3
m=4;然后测试3+3+3
m=3;然后测试2+3+3+3
m=2;然后测试1+3+3+3+3
m=1;然后测试0+3+3+3+3+3+3
m=0;然后以3+3+3+3+3+3+3退出
因此,对于m=5,得到18
一个旁注,您可以使用简化方法:
static public int test(int m) {
return (m == 0) ? 3 : test(m - 1) + 3;
}
为了可视化发生的情况,请使用消息分散代码:
public int test(int m)
{
System.out.println("entering test("+m+")");
int value;
if (m == 0)
value = 3;
else
value = test(m - 1) + 3;
System.out.println("returning "+value+" from test("+m+")");
return value;
}
当然,这只是一个极小的程序,您还可以显示if的哪个分支,m-1,等等
JavaScript等效,因此它可以在浏览器中运行:
功能测试{
console.logentering测试+m+;
var值;
如果m==0
数值=3;
其他的
值=testm-1+3;
console.logreturning+value+来自测试+m+;
返回值;
}
console.logresult:+test3 为了可视化发生的情况,请使用消息分散代码:
public int test(int m)
{
System.out.println("entering test("+m+")");
int value;
if (m == 0)
value = 3;
else
value = test(m - 1) + 3;
System.out.println("returning "+value+" from test("+m+")");
return value;
}
当然,这只是一个极小的程序,您还可以显示if的哪个分支,m-1,等等
JavaScript等效,因此它可以在浏览器中运行:
功能测试{
console.logentering测试+m+;
var值;
如果m==0
数值=3;
其他的
值=testm-1+3;
console.logreturning+value+来自测试+m+;
返回值;
}
console.logresult:+test3;