是否有任何方式讀取和解析文件,以查看函數是否使用for循環與遞歸來獲取其答案?假設它只能是一個或另一個,函數不會引發,並且函數保證結束。是否有可能判斷函數是否遞歸?
回答
在「基本」的條件下,你至少可以告訴我們,如果一個函數直接調用自身:
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沒有名字,所以他們不會匹配他們綁定的全球名稱。一個函數可以被重命名。內部代碼可以爲函數引用不同的名稱。該函數可以調用第二個函數,這是真正的遞歸函數。並且...
基本上,沒有辦法知道函數是遞歸的。
有沒有一般的方法來證明一個計算機程序完成(它被證明有程序,你不知道)。幸運的是,實際上有靜態分析工具,可以爲大多數小程序做到這一點。
此外,對於大多數Python函數來說,它明顯具有什麼樣的複雜性(對於受過教育的程序員而言),或者在文檔中提及了使用哪種算法。
如果你對細節感興趣,你應該閱讀一兩本有關算法的書。你也可以看看https://cs.stackexchange.com/,這是一個更適合一般討論不同算法的計算複雜度的網站。
對不起,如果我不清楚,但這不是問題 - 我說我想使用該程序完成的假設,並且它不是一個不正確的函數。不是爲了證明這一點。我想以編程方式確定函數是使用遞歸還是循環。我意識到這可能是不可能的,但這是真正的問題。我知道你不能以編程方式確定一個函數是否結束,但我想這可能是一個不同的問題(可能通過查看堆棧或其他東西)。 – user3475234 2014-10-28 04:16:43
- 1. 是否有可能判斷iFrame的src是否已更改?
- 2. 這些函數是否是遞歸的?
- 3. 是否有可能判斷WSAStartup是否在進程中被調用?
- 4. 是否有可能判斷用戶是否瀏覽了頁面的一部分?
- 5. 是否有可能判斷java ResultSet是否爲空而不影響記錄?
- 6. 是否有可能判斷環境是否已被傳入rake任務塊?
- 7. 是否可以判斷一個函數是否處於嚴格模式?
- 8. 是否可以判斷某個javascript代碼是否調用特定的函數?
- 9. F#是否有函數來判斷列表是否包含特定值?
- 10. 是否有可能通過IRowsetFastLoad判斷哪一行失敗?
- 11. 如何判斷一個函數是否可以睡覺?
- 12. 如何判斷AUCTeX是否可用?
- 13. 這個Scheme是否函數尾遞歸?
- 14. 是否ocaml memoize遞歸函數
- 15. 是否可以判斷`autoindent`是否設置在vim中?
- 16. 是否可以判斷一個實體是否被跟蹤?
- 17. 如何判斷是否有控制檯
- 18. 如何判斷加載是否有效?
- 19. NPAPI如何判斷NPObject是否是函數?
- 20. 如何判斷一個函數是否是一個類?
- 21. 如何判斷Java SSLSocket是否有可用的數據?
- 22. 如何判斷「ZipArchiveEntry」是否是目錄?
- 23. 是否有可能在lisp中將遞歸函數重寫爲宏?
- 24. 是否有可能在f#中編寫像這樣的遞歸分組函數?
- 25. 是否有可能從函數返回中斷/停止循環?
- 26. 是否有可能在C++中有一個遞歸向量?
- 27. 遞歸檢查數是否是質數
- 28. 是否有可能在創建巨大的位圖之前判斷是否有足夠的可用內存?
- 29. 是否有可能將函數作爲參數傳遞給c?
- 30. 是否有可能在XML中傳遞構造函數參數?
謝謝,這真的非常有幫助,正是我所期待的。有沒有辦法使用字符串作爲函數名稱?換句話說,我可以做'nm = coolfunction(test .__ name __)'然後'nm(x)'或類似的東西嗎?我覺得像這樣,你提到的一些問題可以通過創建一個函數調用圖來解決。 – user3475234 2014-10-28 05:23:18
做了一些研究之後,我看到'coolfunction == getattr'。謝謝你的幫助。 – user3475234 2014-10-28 05:31:55