【发布时间】:2018-09-10 13:59:08
【问题描述】:
这应该是相当基本的。 我觉得我错过了一些明显的东西,但我已经盯着这个看了一段时间了。 我有一个创建 Collatz 序列的递归方法(用作递归练习) 但是,一旦我的方法达到退出要求,我就会有一个“返回值”,然后跳回到方法内的递归调用。 如果有人能告诉我我错过了什么,我将不胜感激! 谢谢,下面的代码!
public int sequenceCreator(int currentVal, int numOfSteps)
{
int nextVal;
while (currentVal != 1)
{
if (currentVal % 2 == 0)
{
nextVal = currentVal / 2;
numOfSteps++;
}
else // (currentVal % 2 > 0)
{
nextVal = (currentVal * 3) + 1;
numOfSteps++;
}
return sequenceCreator(nextVal, numOfSteps);
}
return numOfSteps;
}
【问题讨论】:
-
你做递归错误。摆脱 while 循环。
-
为什么
while语句从不执行多次? -
“一旦我的方法达到退出要求,我就会有一个“返回值”,然后它会跳回到方法内的递归调用。” - 这就是递归的工作原理。您建立一个“堆栈”,一旦满足您的退出标准,它将返回给调用者,调用者将返回给它的调用者......直到到达初始调用者。
-
一旦sequenceCreator 的实例在内部实例返回时再次调用自身,它将返回到递归发生点的原始调用,即调用递归方法的位置。这听起来就像您所看到的,并且正是我们期望发生的。你能澄清一下你看到的问题到底是什么吗?即您是否收到错误、不正确的结果等?
-
@ThomasFox 我不认为混乱是你的错。你并没有真正理解递归,这对理解递归至关重要;D