Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中递归方法的重复回答_Python_Recursion - Fatal编程技术网

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
正文中递归调用自己两次(一次在字符串格式化/打印中,另一次在返回中),在第二个版本中,它只递归调用自己一次(分配给局部变量,然后打印并返回结果)。所以这可能解释了你所看到的行为。