2014-06-09 93 views
-3

在Python中編寫遞歸函數時,使用「print」和「return」之間有什麼區別?我明白兩者在使用它們進行迭代函數時的區別,但是沒有看到任何押韻或理由說明爲什麼在遞歸函數中使用它們更重要。在python中打印和返回遞歸函數的區別

+0

'return'不是「打印並離開功能」。 'return'與函數的調用者通信; 'print'將輸出從整個程序中發出。這就像將報告通過電子郵件發送給您的老闆並通過電子郵件發送給媒體之間的區別。 – user2357112

回答

2

多麼奇怪的問題。

這兩者是完全不同的,它們在遞歸函數中的正確使用與迭代函數一樣重要。您甚至可以說更多重要:畢竟,在迭代函數中,您只返回一次結果;但是在遞歸函數中,你必須在每一步都返回一些東西,否則調用步驟沒有任何工作要做。例如,如果您正在執行mergesort,則每個階段的遞歸函數都必須返回已排序的子列表。如果只是簡單地打印它,而不返回它,那麼調用者將不會獲得子列表進行排序,因此不能將兩個已排序的子列表合併到一個單獨的排序列表中,以便進一步向上傳遞堆棧。

+0

有關不返回任何內容的遞歸函數的示例,請參閱http://ideone.com/qXY9oZ。 –

+0

@NoctisSkytower但是這不是你實際上做過的事情,至少不是在Python中:你可能用純粹的函數式語言來做,但是在Python中我們有迭代。 –

1

我可能會補充說,從函數式編程的角度來看,print是一個副作用,因爲它涉及返回。

考慮編程作爲數學的一個程度。你的函數需要一組輸入,對它們執行一個操作並返回計算結果。在這種情況下打印不是一個計算。它會引起與系統IO的交互,向用戶提供輸出。

對於遞歸函數中的返回和打印,返回是唯一需要的操作。遞歸需要輸入,可選計算和測試。測試定義函數是否將再次被計算修改的輸入調用,或者如果修改的輸入是整體方程的最終解決方案。沒有在這個過程中需要打印的地方,並且每個功能純粹主義者,它在遞歸功能中確實沒有位置(除非它的計算是打印)。

0

遞歸函數中print和return的區別與迭代函數的區別很相似。打印是直接輸出給用戶,返回是該功能的結果。你必須在每一步都返回或者功能永遠不會結束,你會得到一個錯誤。

對於示例 -

def factorial(n): 
    if n == 1: 
     return 1 
    else: 
     return n * factorial(n-1) 

如果您使用的打印而不是函數永遠不會結束。