编写不区分 0 和其他数字的 factorial() 函数
Writing a factorial() function without distinction between 0 and other numbers
这个问题困扰了我很长一段时间:是否可以编写一个阶乘函数(用任何编程语言)而不需要 if statement
(或类似的)returns1
当也以 0
作为参数调用时?
许多阶乘函数是这样的 (Python):
def factorial(n):
for x in range(1, n):
n *= x
return n if n > 0 else 1
但我不知道是否可以不区分n
的不同值...您认为如何?这不是速度和优化的问题,只是我的好奇心。
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;
}
}
这是一个 Haskell 版本:
factorial n = product [1 .. n]
但不确定这是否被视为作弊。
有很多方法可以用代码计算一个数的阶乘。
原始问题显示了如何通过递归来完成,一个答案显示了如何使用 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)
}
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))
希望对您有所帮助!
这个问题困扰了我很长一段时间:是否可以编写一个阶乘函数(用任何编程语言)而不需要 if statement
(或类似的)returns1
当也以 0
作为参数调用时?
许多阶乘函数是这样的 (Python):
def factorial(n):
for x in range(1, n):
n *= x
return n if n > 0 else 1
但我不知道是否可以不区分n
的不同值...您认为如何?这不是速度和优化的问题,只是我的好奇心。
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;
}
}
这是一个 Haskell 版本:
factorial n = product [1 .. n]
但不确定这是否被视为作弊。
有很多方法可以用代码计算一个数的阶乘。
原始问题显示了如何通过递归来完成,一个答案显示了如何使用 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)
}
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))
希望对您有所帮助!