所以我遇到了一个问题的递归解决方案,它以不同于我以前看到的方式跟踪全局变量。我知道两种方法:
一种是使用全局关键字:
count = 0
def global_rec(counter):
global count
count += 1
# do stuff
print(count)
另一个使用默认变量:
def variable_recursive(counter, count=0):
count += 1
if counter <= 0:
return count
return variable_recursive(counter-1, count)
新方法:
#driver function
def driver(counter):
#recursive function being called here
rec_utility.result = 0 <---initializing
rec_utility(counter) <--- calling the recursive function
print(rec_utility.result)
def rec_utility(counter):
if counter <= 0:
return
rec_utility.result += 1 <---- 'what is happening here'
rec_utility(counter-1)
我发现这种方法简单得多,因为在默认变量方法中,我们必须返回要跟踪的变量,代码很快就会变得非常混乱。有人能解释一下为什么像对象属性一样将变量连接传递给函数?我知道python函数只不过是对象,但这是一种跟踪变量的黑客方法还是一种常见的做法?如果是这样,为什么我们有这么多方法来完成同样的任务?谢谢
这并不像你想象的那么神奇。这可能是不好的做法
rec_utility
只是命名空间中的一个变量,恰好是一个函数dir()
将在它在范围内时显示它。作为一个对象,它可以设置新的字段dir(rec_utility)
将显示这些新字段,以及__code__
和其他字段像任何对象一样,您可以设置一个新的字段值,就像您在代码中所做的那样。只有一个
rec_utility
函数,即使您递归调用它,所以在初始化它和修改它时它都是同一个字段一旦你明白了,你就可以决定这是否是个好主意。使用参数可能不那么容易混淆或出错
在某种意义上,这个问题与递归函数无关。假设函数需要一项信息才能正确运行,那么您是否:
在最后一种情况下,值得考虑的是它并不完全健壮:
一般来说,我们认为第二种选择是最好的。它的递归本质并没有什么特别之处,只是需要向下一次调用提供状态(即信息)
相关问题 更多 >
编程相关推荐