Math 编写阶乘()函数而不区分0和其他数字

Math 编写阶乘()函数而不区分0和其他数字,math,language-agnostic,factorial,Math,Language Agnostic,Factorial,这个问题困扰了我很长一段时间:是否可以编写一个阶乘函数(在任何编程语言中),而不使用任何if语句(或类似语句),当使用0作为参数调用时,该语句返回1 许多阶乘函数类似于以下内容(Python): 但是我不知道是否可以不区分不同的n。。。你怎么认为?这不是速度和优化的问题,只是我的好奇心。0!定义为1 下面是我的代码的结果 0 factorial = 1 1 factorial = 1 2 factorial = 2 3 factorial = 6 10 factorial = 3628800

这个问题困扰了我很长一段时间:是否可以编写一个阶乘函数(在任何编程语言中),而不使用任何
if语句(或类似语句),当使用
0
作为参数调用时,该语句返回
1

许多阶乘函数类似于以下内容(Python):

但是我不知道是否可以不区分不同的
n
。。。你怎么认为?这不是速度和优化的问题,只是我的好奇心。

0!定义为1

下面是我的代码的结果

0 factorial = 1
1 factorial = 1
2 factorial = 2
3 factorial = 6
10 factorial = 3628800
这是没有if语句的Java代码

package com.ggl.testing;
公共类阶乘{
公共静态void main(字符串[]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));
}
公共静态长阶乘(int n){
长积=1L;

对于(int i=2;i,这里有一个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系数(n):
事实=1
对于范围(1,n+1)内的i:
事实=事实*1
返回事实
尝试:
x=int(输入('输入一个数字以查找事实:'))
打印(系数(x))
除:
打印('数字应为整数')
x=int(输入('输入一个数字以查找事实:'))
打印(系数(x))

希望这对您有所帮助!

有些语言(如Haskell)有惰性求值,有些甚至没有函数(如Prolog只有谓词)。很好地使用了初始值设定项而不是if来处理
n=0
的情况。您也可以使用
function factorial(n){
    return (new Array(n)).join().split(",").map((x,i) => i+1).reduce((x,y) => x*y)
}