阶乘函数的递归

时间:2014-02-12 04:51:10

标签: objective-c recursion

感觉很愚蠢,但我真的无法理解。

在下面的代码中,为什么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;
}

2 个答案:

答案 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;