这个问题已经困扰了我很长一段时间:是否有可能编写一个阶乘函数(在任何编程语言中),而没有任何if statement
(或类似的)在调用{1
时返回0
{1}}也作为参数?
许多阶乘函数都是这样的(Python):
def factorial(n):
for x in range(1, n):
n *= x
return n if n > 0 else 1
但我不知道是否可以在不区分n
的不同值的情况下完成......你怎么看?这不是速度和优化的问题,只是我的好奇心。
答案 0 :(得分:2)
0!定义为1。
以下是我的代码的结果。
0 factorial = 1
1 factorial = 1
2 factorial = 2
3 factorial = 6
10 factorial = 3628800
这里的Java代码没有if语句,
package com.ggl.testing;
public class Factorial {
public static void main(String[] args) {
int n = 0;
System.out.println(n + " factorial = " + factorial(n));
n = 1;
System.out.println(n + " factorial = " + factorial(n));
n = 2;
System.out.println(n + " factorial = " + factorial(n));
n = 3;
System.out.println(n + " factorial = " + factorial(n));
n = 10;
System.out.println(n + " factorial = " + factorial(n));
}
public static long factorial(int n) {
long product = 1L;
for (int i = 2; i <= n; i++) {
product *= (long) i;
}
return product;
}
}
答案 1 :(得分:2)
这是一个Haskell版本:
factorial n = product [1 .. n]
不确定这是否被视为作弊。
答案 2 :(得分:0)
有许多方法可以用代码计算数字的阶乘
最初的问题显示了如何通过递归来实现,一个答案显示了如何使用for循环。同样可以通过while循环实现
另一个答案显示了Haskell中数组的乘积函数(类似于Matlab中的prod(1:n)
)。
在Javascript中使用循环计算n的阶乘(包括n = 0)的另一种方法是:
function factorial(n){
return (new Array(n)).join().split(",").map((x,i) => i+1).reduce((x,y) => x*y)
}
答案 3 :(得分:0)
def factor(n):
fact=1
for i in range (1,n+1):
fact= fact*1
return fact
try:
x=int(input('Input a number to find the factiorial: '))
print(factor(x))
except:
print('Number should be an integer')
x=int(input('Input a number to find the factiorial: '))
print(factor(x))
希望对您有所帮助!