我想实现阶乘算法,以下代码给出了阶乘(5)的错误结果
int factorial(int n)
{
int i = 1, ret = 1;
while(i++<=n)
ret *= i;
return ret;
}
看起来即使i = 6,代码也会继续运行,我不明白为什么while循环没有停止。
答案 0 :(得分:4)
您正在使用后增量运算符,这意味着i <= n
的最终检查发生在i
最后一次递增之前。换句话说,当i
为5时,您的代码为:
check if i <= 5 -> true
increment i -> i is now 6
execute loop -> executes for i = 6
check if i <= 5 -> false (i is now 6)
您应该更改为:
while(++i <= n)
答案 1 :(得分:3)
尝试每个陈述做一件事。
int factorial(int n)
{
int i = 1, ret = 1;
while(i<=n)
{
i++;
ret *= i;
}
return ret;
}
检查本文上方和下方版本之间的差异。
int factorial(int n)
{
int i = 1, ret = 1;
while(i<=n)
{
ret *= i;
i++;
}
return ret;
}
答案 2 :(得分:0)
i++
会返回i
的值,然后才会递增i
。 (与++i
相对,其中第一个incerements i
并返回递增的值)
答案 3 :(得分:0)
这就是i++
的工作方式。你需要++i
答案 4 :(得分:0)
你正在进行一次额外的循环迭代。
而不是(i++<=n)
,您真正想要的是(i<=n)
,然后在i++;
之后添加ret*=1
。
这实际上使用for循环恕我直言更加干净。