public static int Mystery(int a,int b)
{
if (b == 0)
return 0;
if (b % 2 == 0)
{
return Mystery(a + a, b / 2);
}
else
{
return Mystery(a + a, b / 2) + a;
}
}
大家好,请您告诉我使用返回神秘(a + a ...等)和使用Mystery(a + a)调用它之间的区别? 我一直在想的是,当我使用返回的东西时,它实际上创建了一个返回的方式返回并使用递归而不返回(ex.Mystery(a + a等...))仅在深度上没有实际留下任何回去的路。 谢谢!
答案 0 :(得分:1)
如果您没有从递归调用中返回值,则无法累积所有调用的结果。例如,您正在进行Mystery(…) + a
,因此如果Mystery
没有在那里返回值,则会将a
添加到任何内容(并且不会返回该值)。
当然你也可以先进行递归调用,保存该值并稍后返回:
int value = Mystery(a + a, b / 2);
// …
return value + a;
关键是每个递归调用都需要返回一个由父调用处理的值,以便您实际利用调用。
最后,您通常希望在return
上进行递归调用,因为有些语言可以删除tail recursion。 C#doesn’t do that though。