Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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_Python 3.x_For Loop_If Statement_Recursion - Fatal编程技术网

Python 如何在递归函数中访问此代码?

Python 如何在递归函数中访问此代码?,python,python-3.x,for-loop,if-statement,recursion,Python,Python 3.x,For Loop,If Statement,Recursion,我正在做一个数独解算器,并在网上找到了这段代码,它使用了与我所做的类似的方法,但我不明白在这段代码中如何达到grid[y][x]=0,因为它在前面的行中调用了solve(grid) 我注意到,如果我在它前面放一个else语句(以及如果它的缩进更少),我会得到相同的输出 这是一个递归解决方案。递归意味着solve函数调用自身。当程序从调用返回时,它继续它的代码 grid[y][x] = n # current solve changes grid solve(grid) #

我正在做一个数独解算器,并在网上找到了这段代码,它使用了与我所做的类似的方法,但我不明白在这段代码中如何达到
grid[y][x]=0
,因为它在前面的行中调用了
solve(grid)

我注意到,如果我在它前面放一个
else
语句(以及如果它的缩进更少),我会得到相同的输出


这是一个递归解决方案。递归意味着solve函数调用自身。当程序从调用返回时,它继续它的代码

grid[y][x] = n     # current solve changes grid
solve(grid)        # call recursively solve
                   # the function solve has now returned
                   # and can have changed grid 
grid[y][x] = 0     # now the current solve continues
这是因为类似列表的网格是一个可变对象,这意味着被调用的函数可以更改网格,而调用方可以继续更改网格

有一个条件:solve内部必须有一些条件,以便在多次调用自身后,最后一次调用的solve返回

将其与众所周知的斐波那契函数进行比较:

def F(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return F(n - 1) + F(n - 2)

print(F(6))    

当n==0或n==1时,它停止调用自己。在此之前,它一直使用n-1和n-2调用自己。

这是一个递归解决方案。递归意味着solve函数调用自身。当程序从调用返回时,它继续它的代码

grid[y][x] = n     # current solve changes grid
solve(grid)        # call recursively solve
                   # the function solve has now returned
                   # and can have changed grid 
grid[y][x] = 0     # now the current solve continues
这是因为类似列表的网格是一个可变对象,这意味着被调用的函数可以更改网格,而调用方可以继续更改网格

有一个条件:solve内部必须有一些条件,以便在多次调用自身后,最后一次调用的solve返回

将其与众所周知的斐波那契函数进行比较:

def F(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return F(n - 1) + F(n - 2)

print(F(6))    

当n==0或n==1时,它停止调用自己。在此之前,它一直用n-1和n-2调用自己。

我不明白你有什么毛病——这只是一个普通的函数调用。显然,一个函数可以调用另一个函数,否则我们做不了多少


注意:名称
solve
指向的是在运行时解析的-在编译时发生的唯一事情是生成的字节码知道它必须解析名称
solve
,并将调用op应用于该名称解析为的任何名称

我不明白你有什么毛病——这只是一个普通的函数调用。显然,一个函数可以调用另一个函数,否则我们做不了多少


注意:名称
solve
指向的是在运行时解析的-在编译时发生的唯一事情是生成的字节码知道它必须解析名称
solve
,并将调用op应用于该名称解析为的任何名称

显而易见的答案:这一行在从
solve()
返回后执行。为什么您认为不应该到达它?递归调用与常规调用没有什么不同-一旦调用返回,外部函数将恢复。显而易见的答案:这一行在从
solve()
返回后执行。为什么您认为不应该到达它?递归调用与常规调用没有什么不同——一旦调用返回,外部函数就会恢复。是的,我知道。代码没有问题,我只是想了解背后的原理it@IsaacK0我不是说有什么问题,只是没有任何理由怀疑它是如何工作的,也没有任何理由怀疑递归调用为什么会阻止执行下一行。是的,我知道。代码没有问题,我只是想了解背后的原理it@IsaacK0我不是说有什么问题,只是没有任何理由怀疑它是如何工作的,也没有任何理由怀疑递归调用为什么会阻止执行下一行。