【问题标题】:Recursive fraction (python)递归分数(python)
【发布时间】:2017-11-24 05:17:57
【问题描述】:

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

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

在我的主要内容中,我必须显示从 1 到 10 的 x 值的 f(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()

不知道我做错了什么。我是递归的新手,在使用了这么长时间迭代后不太了解它。

【问题讨论】:

  • 您正在返回数字 2 + recursive(x-1),因为 x /x 是 1。使用括号。
  • 您不应通过合并某人发布的答案来更改您的问题。

标签: python function recursion fractions


【解决方案1】:

您缺少 x+1 的括号。可能是笔误。

你的函数应该在下面,

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

【讨论】:

  • 另外,在else 之后添加一个打印,以便打印整个系列
  • @Prakash Palnati 可能是我错了。但是当我调用print(recursive(2)) 时它返回0。它应该是1/2 + 2/3 对。即1.1666666666666665?
  • 我尝试修复括号并为 else 语句添加打印,但最终得到错误 TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
  • 修正括号,看看你的结果是否好。对于打印,您可以参考下面的答案。总和喜欢.. "{}/{}".format(a-1, a)
【解决方案2】:

还有一个关于当前返回 0 的数据类型的更正,我们必须将其类型转换为浮点数

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

定义主(): 打印(递归(10))

【讨论】:

    【解决方案3】:

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

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

    其次,您应该编写单独的代码来打印从110f(x)print(recursive(10)) 只是打印recursive(10) 返回的值,大约是7.98。你想要的是一个函数,它可以打印出总和的可视化表示。

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

    【讨论】:

      【解决方案4】:

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

      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 循环和一个计数器,但是我会进入迭代而不是递归。

      【讨论】:

        【解决方案5】:

        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.746p>330

        【讨论】:

          猜你喜欢
          • 2015-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多