我写了这个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/