目标C中的因子代码

时间:2013-06-04 20:13:09

标签: objective-c factorial

仅使用for或while语句,我正在尝试创建一个程序来生成并打印前10个阶乘表。这是我的代码:

    for (count = 1; count<=10; ++count) 
    {
        n = count;
        while (n > 0){
            count *= (count-1);
            n -= 1;
        }
        NSLog(@"  %2g            %3g", count, factorial);
    }

我不明白为什么这不起作用。它永远不会离开循环并永远继续下去。纠正是什么?谢谢!

3 个答案:

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