什么情況下用遞歸?


遞歸的特點,可以看出遞歸可以大大縮短程序的代碼,有意識的使用遞歸,可以用較短的代碼解決一些復雜的問題。甚至有些問題非得使用遞歸解決不可。那么什么時候我們該使用遞歸呢?

 

遞歸算法的基本思想是:把規模大的、較難解決的問題變成規模較小的、易解決的同一問題。規模較小的問題又變成規模更小的問題,並且小到一定程度可以直接得出它的解,從而得到原來問題的解。 

 

  一個問題要采用遞歸方法來解決時,必須符合以下三個條件:

1.解決問題時,可以把一個問題轉化為一個新的問題,而這個新的問題的解決方法仍與原問題的解法相同,只是所處理的對象有所不同,這些被處理的對象之間是有規律的遞增或遞減;

2.可以通過轉化過程是問題得到解決;

3.必定要有一個明確的結束遞歸的條件,否則遞歸將會無止境地進行下去,直到耗盡系統資源。也就是說必須要某個終止遞歸的條件。如求階乘問題,我們要求n的階乘(n!),可以把這個問題轉化為n*(n-1)!,而要求(n-1)!又可轉化為(n-1)*(n-2)!,……,這里面都有一個一個數乘以另一個數階乘的問題,被處理的對象分別是n,n-1,……,是有規律的遞減。但是我們不能讓程序無休止的乘下去,必須要給他一個結束條件,該問題恰好有一個結束條件,那就是當n=0時,0!=1。

 

 

 

 

遞歸與循環是兩種不同的解決問題的典型思路。 

遞歸算法: 

優點:代碼簡潔、清晰,並且容易驗證正確性。

缺點:它的運行需要較多次數的函數調用,如果調用層數比較深,每次都要創建新的變量,需要增加額外的堆棧處理,會對執行效率有一定影響,占用過多的內存資源。

循環算法:  

優點:速度快,結構簡單。

缺點:並不能解決所有的問題。有的問題適合使用遞歸而不是循環。如果使用循環並不困難的話,最好使用循環。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM