是否可以判断函数是否递归?

时间:2014-10-28 03:41:28

标签: python for-loop recursion reflection

是否有任何方法无法读取和解析文件以查看函数是否使用for循环与递归来获得答案?假设它只能是一个或另一个,函数不会引发,并且函数保证结束。

2 个答案:

答案 0 :(得分:1)

没有通用的方法来证明计算机程序已经完成(事实证明,有些程序无法分辨)。幸运的是,在实践中有静态分析工具,可以为大多数小程序执行此操作。

此外,对于大多数Python函数来说,它们要么具有明显的复杂性(对于受过良好教育的程序员),要么在文档中提到了使用的算法。

如果您对细节感兴趣,您应该阅读一本或两本关于算法的好书。您还可以查看https://cs.stackexchange.com/,这是一个更适合不同算法计算复杂性的一般性讨论的网站。

答案 1 :(得分:0)

"基本"条件,你至少可以告诉函数是否会直接调用自己:

def test(x):
    return test(x)

test.__code__.co_name in test.__code__.co_names  # true and co_name can't be changed
test.__name__ in test.__code__.co_names  # true but name can be changed

这将检查函数的名称是否在函数引用的全局名称中。

我说"基本"因为有很多方法可以解决这个问题。 Lambdas没有名字,所以他们不会匹配他们所绑定的全球名称。可以重命名一个函数。内部代码可以为函数引用不同的名称。该函数可以调用第二个函数,这是真正的递归函数。等等...

基本上,没有办法确定函数是递归的。