怎么编写计算阶乘的函数?

请帮忙看看要怎么做,万分感谢!!(T ^ T)真的搞不定了,题目要求如图

img

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)
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/4647504
  • 你也可以参考下这篇文章:配对和非配对t检验的差异
  • 除此之外, 这篇博客: T^T问题求位数(对数求位数)中的 思路 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 刚开始看这道题本来想用python,毕竟python的数据类型转换起来
    比较方便,用快速幂求出该数,并转换为字符串类型,在输出字符串
    长度即可(噼里啪啦),but仔细一想其实这是一道高中的数学题,
    取该数的log10的值加一。有高中知识可得log10(N^N)=N*log10(N)。

  • 以下回答由chatgpt基于相关博客总结生成:

    答:可以编写一个递归函数来计算阶乘,例如:

    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)
    

    这样就可以在参数为负数时抛出异常,避免无限递归的情况发生。