我写了这个python代码,它来自Wolfram alpha,它应该返回任何正值(我可能在某个地方搞砸了)的阶乘,是否为整数:

from math import *

def double_factorial(n):
    if int(n) == n:
        n = int(n)
        if [0,1].__contains__(n):
            return 1
        a = (n&1) + 2
        b = 1
        while a<=n:
            b*=a
            a+= 2
        return float(b)
    else:
        return factorials(n/2) * 2**(n/2) *(pi/2)**(.25 *(-1+cos(n * pi)))

def factorials(n):
    return pi**(.5 * sin(n*pi)**2) * 2**(-n + .25 * (-1 + cos(2*n*pi))) * double_factorial(2*n)


问题是,说我输入pi到小数点后6位。 2 * n不会很快成为以小数点为0的浮点数,因此等式变为

pi**(.5 * sin(n*pi)**2) * 2**(-n + .25 * (-1 + cos(2*n*pi))) * double_factorial(loop(loop(loop(...)))))


我将如何停止递归并仍然得到答案?

香港专业教育学院有建议添加索引到定义或类似的东西,但问题是,如果代码到达索引时停止,则仍然没有答案可放回上一个“嵌套”或您所谓的名称中

最佳答案

您根据f定义了g,并且根据g定义了f。但是,您不仅具有没有基点的循环定义来启动递归。你有更糟的事情。 f的定义实际上是g倒置的定义。 f恰恰是撤消g所做的事情,反之亦然。如果您尝试自己实现伽玛(即,不使用库中已有的伽玛),则需要使用一种公式,用您知道如何评估的其他方式表达伽玛。仅仅使用一个公式及其类似的求逆方法,对于您将其应用到的几乎所有问题都将失败。

关于python - 如何退出递归数学公式并仍然得到答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2747390/

10-14 19:05