我的问题不在于代码,因为它是编写阶乘程序背后的逻辑。我目前正在赫尔辛基大学攻读MOOC,我已经陷入了这项工作。随着课程进行新的练习,说明变得越来越模糊。我意识到这可能不是问这个问题的地方,如果你必须标记或删除它,我明白了。我试图自己学习这个,因为我没有时间或金钱去实际上大学。这门课程没有时间限制,我不会收到成绩证书,我只是想知识。
这些是为练习提供的指示
创建一个计算数字n的阶乘的程序。阶乘n!使用公式1 * 2 * 3 * ... * n计算。例如4! = 1 * 2 * 3 * 4 = 24.此外,定义为0! = 1。
// i don't understand the example that 4!= 1*2*3*4 = 24
// or how 0! = 1 pertains to multiplying numbers in succession to find the
// factorial of the user input number.
// i understand that 0! = 1 simply delclares that 0 is not equal to 1
// and 4 is not equal to 24, however if the 4! = portion of this statement
// is in reference to the user input number 4 that statement would not be
// true as 1*2*3*4 does equal 24 and 4 would be the number of executions
// of the block execution of the loop required to write the factorial
// program.
// EDIT: okay so according to this http://en.wikipedia.org/wiki/Factorial
// i am wrong about what is being done here as they are not declaring
// that 4 not equals 24 but yet that 4! is a way of correlating the non
// negative numbers up to 4, but given that math is not my strong suit
// it is even more confusing to me as to what i should be doing.
示例输出:
输入一个数字:3 因子是6
输入一个数字:10 因子是3628800
我目前的代码尝试如下
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("Type a number:");
int userIn = Integer.parseInt(reader.nextLine());
int factorial = 1;
int extra = 1;
int sum = 0;
while (factorial <= userIn) {
factorial++;
sum = factorial + userIn + extra;
}
System.out.println("The factorial is:"+sum);
}
}
我不明白我错过了什么,我从研究中得知,在现实世界中你不会编码,因为你可以下载库以执行比我能做得更有效的阶乘函数代码,但我不想简单地跳过这个练习,知道别人已经编码并创建了一个图书馆,让我们的生活更轻松,我想学习这门课程所提供的一切。如果我做了一个简单的错误我不介意提供代码修正,但是我想了解是什么让因子操作滴答可以这么说,而不仅仅是给出答案所以我可以继续。
答案 0 :(得分:2)
非负整数n的阶乘,由n!表示,是所有小于或等于n的正整数的乘积。例如: - 4!= 1 * 2 * 3 * 4。 0!= 1表示阶乘0为1而不是0不等于1.值0!根据惯例,空产品是1。空产品或无效产品是不增加因素的结果。按惯例,它等于乘法标识1,正如空白和 - 不添加数字的结果 - 按照惯例为零(类似于前0个自然数之和为0),加法标识。 有关空产品的更多信息,请阅读http://en.wikipedia.org/wiki/Empty_product
对于编程部分,基本上有两种方法: -
使用for循环(无递归)
int factorial ( int input )
{
int x, fact = 1;
for ( x = input; x > 1; x--) // iterating from n -> n-1 -> n-2 ... 1
{
fact *= x; // multiplying each number into the fact variable to get the factorial
}
return fact;
}
递归方法 - 函数调用自身(注意 - 避免在实际编程中使用这种方法,因为它可能是高度资源消耗和容易出错的问题,正如#34; Edwin Buck&#34;在评论中指出的那样)
public int Factorial(int n)
{
if (n == 0)
{
return 1; //Base condition - If factorial reaches 0 return 1 and end recursion
}
else
{
return n * Factorial(n-1); // For factorial of n, function returns n * Factorial(n-1) i.e recursively calling the factorial function with one less value in the parameter untill 0 is reached (upon which base condtiion will be evaluated)
}
}
答案 1 :(得分:1)
问题出在这里
sum = factorial + userIn + extra;
您可以从循环中的最新factorial++
值“计算”您的阶乘。
您无法以这种方式从总和中计算因子。因子是1和“阶乘”数之间的所有整数的乘积,所以
1! = 1
2! = 1 * 2
3! = 1 * 2 * 3
4! = 1 * 2 * 3 * 4
如果你开始计算你的阶乘错误,那么问题的其他部分并不重要,延伸就会出错。
答案 2 :(得分:1)
如果您不想使用外部功能,请尝试使用此功能
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("Type a number:");
int userIn = Integer.parseInt(reader.nextLine());
int factorial = 1;
int i= userin;
while (userin >= 1) {
factorial *= userIn;
userin--;
}
System.out.println("The factorial is:"+factorial);
}
}
答案 3 :(得分:0)
// Factorial example (ie 5 * 4 * 3 * 2 * 1)
function factorial($n) {
if ($n == 1) return 1;
return $n * factorial($n-1);
}
echo factorial(5); // Outputs 120
// Nested Array Summing Example
$example = array(1, 2, array(10,20,30), 4);
function sum_array($array) {
$total = 0;
foreach ($array as $element) {
if(is_array($element)) {
$total += sum_array($element);
} else {
$total += $element;
}
}
return $total;
}
echo sum_array($example); // Outputs 67
答案 4 :(得分:0)
您的问题类似于我的问题,实际上是学校的作业。 尽管问题得到了回答,但我会提供我的解决方案。
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int i = 1;
int factorial = 1;
System.out.println("Give number: ");
int number = Integer.parseInt(reader.nextLine());
while (i <= number) {
factorial = factorial * i;
i++;
}
System.out.println("Answer is " + factorial);
}