请帮忙看看要怎么做,万分感谢!!(T ^ T)真的搞不定了,题目要求如图
def fact(n):
if n == 1: return 1
return fact(n - 1) * n
m, n = map(int, input().split())
r = fact(n) / (fact(m) * fact(n - m))
print(r)
def fac(n):
if n < 1:
return 1
else:
return n * fac(n - 1)
m = int(input('m:'))
n = int(input('n:'))
if m > n: m, n = n, m
c_nm = fac(n) / (fac(m) *fac(n - m))
print(c_nm)
刚开始看这道题本来想用python,毕竟python的数据类型转换起来
比较方便,用快速幂求出该数,并转换为字符串类型,在输出字符串
长度即可(噼里啪啦),but仔细一想其实这是一道高中的数学题,
取该数的log10的值加一。有高中知识可得log10(N^N)=N*log10(N)。
答:可以编写一个递归函数来计算阶乘,例如:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
需要求解的阶乘数可以根据具体需求来确定,只要在调用函数时传入相应的参数即可。
对于阶乘函数的参数,需要注意的是其应该是一个非负整数,否则函数可能会陷入无限递归的过程中。可以在函数中加入参数的类型和取值范围判断,例如:
def factorial(n: int) -> int:
if n < 0:
raise ValueError("Factorial is undefined for negative numbers.")
elif n == 0:
return 1
else:
return n * factorial(n-1)
这样就可以在参数为负数时抛出异常,避免无限递归的情况发生。