递归分数(python)

时间:2017-11-24 05:17:58

标签: python function recursion fractions

给定一个整数x,该函数应计算并返回以下内容:

f(x) = 1/2 + 2/3 + ... + x/x+1

在我的主要内容中,我必须显示f(x)的x值,从1到10,包括在内。

def recursive(x):
    if x == 0:
        return 0
    else:
        return (x / (x + 1)) + recursive(x-1)

def main():
    print(recursive(10))   
main()

不确定我做错了什么。我对递归感到陌生,在使用迭代这么长时间之后我就不太了解它。

5 个答案:

答案 0 :(得分:2)

您缺少x + 1的括号。可能是一个错字。

你的功能应该在下面,

def recursive(x):
    if x == 0:
        return 0
    else:
        return x / (x + 1) + recursive(x-1)

答案 1 :(得分:0)

还有一个关于数据类型的修正,目前它返回0我们必须将它转换为浮动

def recursive(x):
if x == 0:
    return 0
else:
    return (float(x) / (x + 1)) + recursive(x-1)

def main():     print(recursive(10))

答案 2 :(得分:0)

首先,你需要在分母中使用括号。现在你正在计算(x/x) + 1 + recursive(x-1)

def recursive(x):
    if x == 0:
        return 0
    else:
        return x/(x+1) + recursive(x-1)

其次,您应该编写单独的代码,以便将f(x)1打印到10print(recursive(10))只打印recursive(10)返回的值,大约为7.98。你想要的是一个打印出总和的直观表示的函数。

s = '1/2'
for i in range(2, 11): 
    s += ' + {}/{}'.format(i, i+1)
print(s)

答案 3 :(得分:0)

Python还有一个非常有用的“生成器”函数 - yield,可用于开发实际为每个调用返回单个值的递归函数:

def factor(x: int):
    for a in range(x, 0, -1):
        yield((a-1)/a)

# Can be retrieved as a list or summed

l = [f for f in factor(10)]

s = sum(factor(10))


print("Result of {} is {}".format(l, s))
  

[0.9,0.8888888888888888,0.875,0.8571428571428571,0.8333333333333334,0.8,0.75,0.66666666666666666,0.5,0.0]的结果是7.071031746031746

答案 4 :(得分:0)

我想我误解了这个问题,并找到了正确的答案:

def recursive(x):
    if x == 0:
        return 0
    else:
        return (float(x) / (x + 1)) + recursive(x-1)

def main():
    print(recursive(1))
    print(recursive(2))
    print(recursive(3))
    print(recursive(4))
    print(recursive(5))
    print(recursive(6))
    print(recursive(7))
    print(recursive(8))
    print(recursive(9))
    print(recursive(10))

main()

我在考虑给定一个递归函数它应该循环并重复自己(derp)我想我可以做一个for循环和一个计数器,但后来我会进入迭代而不是递归。