python中递归方法的重复回答
我编写了简单的递归函数:python中递归方法的重复回答,python,recursion,Python,Recursion,我编写了简单的递归函数: def y(n): if n == 0: print("{} - {}".format(n, 0.182)) return 0.182 else: print("{} - {}".format(n, 1 / n - 5 * y(n - 1))) return 1 / n - 5 * y(n - 1) 我不明白为什么它给了我混乱的答案。以下是一个示例: 0 - 0.182 1 - 0.090
def y(n):
if n == 0:
print("{} - {}".format(n, 0.182))
return 0.182
else:
print("{} - {}".format(n, 1 / n - 5 * y(n - 1)))
return 1 / n - 5 * y(n - 1)
我不明白为什么它给了我混乱的答案。以下是一个示例:
0 - 0.182
1 - 0.09000000000000008
0 - 0.182
2 - 0.0499999999999996
0 - 0.182
1 - 0.09000000000000008
0 - 0.182
3 - 0.08333333333333531
0 - 0.182
1 - 0.09000000000000008
0 - 0.182
当我将代码更改为:
def y(n):
if n == 0:
result = 0.182
print("{} - {}".format(n, result))
return result
else:
result = 1 / n - 5 * y(n - 1)
print("{} - {}".format(n, result))
return result
它工作得非常好。为什么?因为在这个模块中:
else:
print("{} - {}".format(n, 1 / n - 5 * y(n - 1)))
return 1 / n - 5 * y(n - 1)
您正在运行y两次(打印时和返回时)
在第二个版本中:
result = 1 / n - 5 * y(n - 1)
print("{} - {}".format(n, result))
return result
您正在执行y一次。所有错误都是由于
其他部分造成的
正如andreis11所提到的,将值传递给函数y()
两次
尝试将1/n-5*y(n-1))
传递给一个变量,然后只调用该函数一次
result = 1 / n - 5 * y(n - 1)
print("{} - {}".format(n, result))
return result
将正常工作,因为相同的原因,错误出现在代码的最后一行:
return 1 / n - 5 * y (n - 1)
您不需要返回任何内容,因为打印内容已经给出了所需的值
试试这个:
def y(n):
if n == 0:
print("{} - {}".format(n, 0.182))
return 0.182
else:
print("{} - {}".format(n, 1 / n - 5 * y(n - 1)))
这个代码应该做什么?你怎么称呼它?请提供更多详情。在任何情况下,第一个版本在else
正文中递归调用自己两次(一次在字符串格式化/打印中,另一次在返回中),在第二个版本中,它只递归调用自己一次(分配给局部变量,然后打印并返回结果)。所以这可能解释了你所看到的行为。