日期:2014-05-17  浏览次数:21072 次

关于设计阶乘计算器问题
为什么我用下面的代码,每次只计算前面两个就完事了。比如我要10的阶乘,每次只能输出90的结果,求教。

C# code
 

protected void Button2_Click(object sender, EventArgs e)
    {
        int factNumber = int.Parse(TextBox3.Text);
        int i = 1;

        for (i = factNumber * (factNumber - 1); factNumber > 1; factNumber--)
        {
            Label2.Text = i.ToString();
        }

       
    }




------解决方案--------------------
阶乘,递归实现
C# code
 public long foo(long factNumber)
            {
                if (factNumber > 1)
                {
                    return factNumber * foo(factNumber - 1);
                }
                return factNumber;
            }

------解决方案--------------------
int溢出了,有什么好大惊小怪的。
------解决方案--------------------
就LZ的代码来说
1.i需要参与到迭代中,所以 i = factNumber * (factNumber - 1) 应该为 i = i * factNumber
2.for语句的初始化代码只执行一次,所以迭代应当移至第三部分
稍微修改后的for语句应该是
for (int i = 1; factNumber >= 1; i = i * factNumber--)