2

我正在制作一个计算器,并添加了一些更复杂的按钮。我无法理解的是阶乘。我知道它是什么,但似乎无法做到。当我查看其他人的问题时,代码 - 无论如何对我来说 - 不起作用(顺便说一句,这不是家庭作业问题)。这是阶乘的算法(是这个词吗?)周围的代码:

} else if (oper.equals("shriek")) {

                resultm.setText("" + answer);
                resultl.setText("");
                resultr.setText("");
                oper = "";
                currentNuml = "";
                currentNumr = "";
            }

注意:之间的差距

} else if (oper.equals("shriek")) {

resultm.setText("" + answer);

是算法要去的地方。谢谢,任何帮助将不胜感激!

4

1 回答 1

1

创建阶乘的两种变体是递归和非递归方法。

阶乘的基本逻辑是5! = 5*4*3*2*1

所以这应该很容易用循环(非递归)实现。只需将数字与循环号相乘即可生成循环号

int fact(int no){
   int result=1;
   for (int i=1;i<no;i++)result*=i;
   return result;
}

第二种是递归算法。这意味着从自身内部调用函数。

int fact(int no){
   if(no==1)
           return 1;
   else
           return no * fact(no-1);
}

这将像这样工作。

例如事实(3)

no=3 Go to else return 3*fact(2)
    no=2 Go to else return 2* fact(1)
                 no=1 return 1
    no=2 return 2*1 => 2
no=3 Return 3*2 => 6

希望这有助于您理解

于 2012-12-23T20:38:15.390 回答