2017-01-17 46 views
1

我有2年的IT經驗。我沒有看到任何遞歸代碼。我想知道是否有任何公司或組織在其生產環境中使用遞歸代碼。如果有些人也解釋用例,那將是很棒的。誰和何時在生產環境中使用遞歸代碼

+1

嗯......如果你在lisp或scheme中開發的話,如果你不能使用遞歸的話,你會非常容易被搞砸。 – bolov

+3

如果Web開發人員從不在生產中看到C++代碼,那麼並不意味着不使用C++。 IT是一個非常重要的領域,你可以在任何範例中找到合法用途 – bolov

+0

@bolov由於遞歸總是可以用迭代代替,所以任何包含「必須使用遞歸」(從遞歸調用函數的意義上來說)的句子都是根本錯誤的(對不起如此苛刻;-))。也就是說,許多遞歸數據結構可以用遞歸函數精美地處理,但事實上迭代通常更快,而且就stackoverflow而言風險更小。 –

回答

1

所有使用可變參數模板的代碼都必須使用遞歸,請參閱參考資料。 http://kevinushey.github.io/blog/2016/01/27/introduction-to-c++-variadic-templates/

this question的答案給出了一些遞歸示例。最有說服力的是爲遞歸定義的語言(如C和大多數其他塊,其中塊可以包含塊,表達式表達式等)的手編編譯器(或者說是語法分析器)實現。也許這對我來說是最令人信服的,因爲我在CS課程中這樣做了,但仍然如此。即使在這種情況下,生產編譯器也可能使用工具創建並且不是遞歸的。如果有人澄清了gcc或其他開源編譯器的內部工作原理,我會很感激。

我通常會假定某些處理遞歸深度遞歸數據結構的程序(如平衡樹,而不是普通樹或列表)使用遞歸,僅僅因爲它簡單而優雅,並且深度限制將刪除遞歸的最大障礙。

回想一下,我實際上已經使用遞歸來解析一個簡單的「選項語言」,用於一個具有選項-eval <file>的內部定製程序,其中引用文件包含更多選項,可能包含更多-eval s。引用的文件確實是遞歸評估的。

+1

你的頭像的分形很可能是遞歸生成的。 – bolov

+0

@bolov其實,如果我沒記錯的話,雖然數學是遞歸的(步驟n的輸出被用作步驟n + 1的輸入),但我的實現是迭代的。原因在於可能需要數以萬計的迭代來實現結果。 –

+0

呃...它不是一個生產環境,它不計數! (只是在開玩笑:))) – bolov

0

爲了您的信息,我在前幾天進入IT公司,在生產環境中使用它來編寫遞歸代碼。如果你想c,我可以發送一些遞歸代碼示例

+0

我不需要示例。我只是好奇,在什麼情況下需要用遞歸而不是任何替代方法。 – shubham12511

+1

@ sbmc7你從字面上問「我想知道如果有任何公司或組織使用遞歸代碼」,並且smn說「是的,我們做了!」。這清楚地回答了這個問題。如果你不喜歡這個答案,你可能想把你的問題改爲「在什麼情況下[某人需要用遞歸而不是任何替代方法去做」,這是一個更有趣的問題,因爲這是絕對不可能的沒有公司曾經使用過遞歸。 (順便說一下,有沒有很多替代方法,有嗎?只有一個。) –

+1

@ sbmc7讓我給你一個例子,我們有一個場景,就像我們有一個進程proc1,直到進程2完成後才能運行所以我做了一個技巧,我寫了一個主要的過程,在這個過程中,我寫了1個IF else語句,就好像過程2成功運行,然後只有過程1有了它的插槽,否則它需要2分鐘的睡眠時間,然後再次調用它自己。希望現在對你有點清楚。 –

1

如果程序基本上是CRUD(創建,檢索,更新,刪除)界面到某種數據庫的界面,你不會看到太多的遞歸調用。這是很多嚴肅的現實世界的編程。

但是大量的程序有樹。例如。藝術品樹或3D動畫對象樹。一旦你使用樹木,遞歸是解決問題的最簡單方法。

還有「函數式編程」範例,用遞歸替代迭代。它有一些理論上的好處,並且在某些環境中使用,雖然它仍然有點學術性和實驗性。

+0

函數式編程最近引起了很多關注,因爲它與並行執行(共享數據較少)保持一致。 –