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

Python 是否可以判断函数是否是递归的?,python,for-loop,recursion,reflection,Python,For Loop,Recursion,Reflection,除了读取和解析文件以查看函数是否使用for循环和递归来获得其答案之外,还有其他方法吗?假设它只能是一个或另一个,函数不上升,并且函数保证结束。没有通用的方法来证明计算机程序是否完成(已经证明有一些程序无法判断)。幸运的是,在实践中有一些静态分析工具,可以为大多数小程序实现这一点 此外,对于大多数Python函数来说,要么很明显它们有多复杂(对于受过教育的程序员来说),要么在文档中提到使用了什么算法 如果你对细节感兴趣,你应该读一两本关于算法的好书。您还可以看看,这是一个更适合对不同算法的计算复杂

除了读取和解析文件以查看函数是否使用for循环和递归来获得其答案之外,还有其他方法吗?假设它只能是一个或另一个,函数不上升,并且函数保证结束。

没有通用的方法来证明计算机程序是否完成(已经证明有一些程序无法判断)。幸运的是,在实践中有一些静态分析工具,可以为大多数小程序实现这一点

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

如果你对细节感兴趣,你应该读一两本关于算法的好书。您还可以看看,这是一个更适合对不同算法的计算复杂性进行一般性讨论的网站。

在“基本”条件下,您至少可以知道函数是否会直接调用自身:

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
这将检查函数的名称是否在函数引用的全局名称中

我说“基本”是因为有很多方法可以解决这个问题。lambda没有名称,因此它们与绑定到的全局名称不匹配。可以重命名函数。内部代码可以为函数引用不同的名称。该函数可以调用第二个函数,即真正的递归函数。而且不停地


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

如果我不清楚,我很抱歉,但这不是问题所在-我说我想假设程序完成,并且它不是一个错误的函数。不是为了证明这一点。我想通过编程来确定函数是使用递归还是使用循环。我意识到这可能不可能,但这才是真正的问题。我知道您无法通过编程确定函数是否结束,但我认为这可能是另一个问题(可能通过查看堆栈或其他内容)。