精慕HU
那应该工作:import operatordef foo(n): if n == 0: return 1 l = range(1, n + 1) top = sum(l) bottom = reduce(operator.mul, l, 1) return foo(n - 1) + float(top) / float(bottom)现在,如果要使用累积结果来完成此操作,则需要存储成瘾和产品,例如:def foo(step, n, r, s, p): if n == step: return r s += step + 1 p *= step + 1 r += float(s) / float(p) return foo(step + 1, n, r, s, p)def bar(n): return foo(0, n, 1, 0, 1)只是为了好玩,这是第三个版本,以某种方式更有意义,但是它是非累加的,因为它首先计算总和和乘积,然后在每个步骤将它们递减:def foo(n, s, p): if n == 0: return 1 return float(s) / float(p) + foo(n - 1, s - n, p / n)def bar(n): l = range(1, n + 1) s = sum(l) p = 1 for e in l: p *= e return foo(n, s, p)