仅使用for或while语句,我正在尝试创建一个程序来生成并打印前10个阶乘表。这是我的代码:
for (count = 1; count<=10; ++count)
{
n = count;
while (n > 0){
count *= (count-1);
n -= 1;
}
NSLog(@" %2g %3g", count, factorial);
}
我不明白为什么这不起作用。它永远不会离开循环并永远继续下去。纠正是什么?谢谢!
答案 0 :(得分:4)
原因:
count *= (count-1);
由于count
从1开始,它将始终重置为0
,因此外部循环的count <= 10
条件将始终为真,因此无限循环。
无论如何,你过度复杂了。
for (int i = 1; i <= 10; i++) {
int r = 1, n = i;
while (n)
r *= n--;
printf("%d! = %d\n", i, r);
}
答案 1 :(得分:4)
在数学中,n!与Γ(n + 1)相同(见:http://en.wikipedia.org/wiki/Gamma_function)
所以只需使用:
-(float)factorial:(float)number1 {
return tgammaf(++number1);
}
这甚至适用于花车和负数,
发布的其他解决方案很长且无关紧要,只能使用 正整数。
答案 2 :(得分:1)
在第一次循环迭代期间, count 为1,因此 n 为1,然后输入while并将 count 设置为零( count-1 ),并减少 n ,它变为零,然后退出。因此在第二次循环迭代期间, count 将为零。你继续减少 count 并且它永远不会增加,所以你永远不会退出循环,直到发生数字溢出。
你正在做的更难(也是效率低下)。是否足以让 n 与 count 相乘以获得阶乘:
int n=1;
for (count = 1; count<=10; ++count)
{
n*= count;
NSLog(@"%d",n);
}