在下面的代码中,为什么else if
语句中的递归在达到1时停止?它不应该最终返回-1并继续将其返回到无穷大?
- (int)factorial:(int)operand
{
if (operand < 0) return -1;
else if (operand > 1) return operand * [self factorial:operand - 1];
else return 1;
}
答案 0 :(得分:1)
所以递归只是一次又一次地调用该方法,直到你达到某种基本情况为止。让我们看看如果operand
等于一个会发生什么:
if (operand < 0) return -1;
它不小于零,所以继续下一个条款。
else if (operand > 1) return operand * [self factorial:operand - 1];
不是&gt; 1它等于1,所以转到下一个句子。
else return 1;
这就是必须的,所以它返回1.
答案 1 :(得分:1)
让我们分步看看。
[self factorial:3]
return 3 * [self factorial:2];
return 3 * (2 * [self factorial:1]);
return 3 * (2 * (1 * [self factorial:0]));
return 3 * (2 * (1 * (1))) // Reached to return 1;