八皇后問題c語言遞歸 如何理解遞歸,回溯,動態(tài)規(guī)劃等算法?
如何理解遞歸,回溯,動態(tài)規(guī)劃等算法?遞歸比較簡單,是遞歸的逆算法。例如,給定a(10)和a(n)=f(a(n1)),讓您找到a(1)。回溯是一種必須用于深度優(yōu)先搜索的方法。建議大家看一看“八皇后問題”
如何理解遞歸,回溯,動態(tài)規(guī)劃等算法?
遞歸比較簡單,是遞歸的逆算法。例如,給定a(10)和a(n)=f(a(n1)),讓您找到a(1)。回溯是一種必須用于深度優(yōu)先搜索的方法。建議大家看一看“八皇后問題”,看完后要理解。動態(tài)規(guī)劃是一種以空間換時間的算法,即占用大量內存,但具有較高的時間效率。建議你看看“攔截導彈”問題和“0/1背包問題”。最好先看看動態(tài)規(guī)劃中的問題,然后再了解概念
遞歸的基本思想是“調用你自己”。使用遞歸的方法是直接或間接地調用自己。
其實遞歸方法體現(xiàn)了“類比”和“同步重復”的思想。它可以用簡單的程序解決一些復雜的計算問題,但計算量很大。還有一些數(shù)據(jù)結構,如二叉樹,具有固有的遞歸特性;另外還有一種問題,雖然沒有明顯的遞歸結構,但由于其普遍性,用遞歸程序編寫程序比其它方法更容易,如八皇后問題、河內塔問題等對于遞歸程序,我們應該學會用遞歸來解決問題。無論是直接遞歸還是間接遞歸,都需要在當前層調用下一層時實現(xiàn)參數(shù)傳遞,獲取下一層返回的結果,并通過調用上一層返回當前層的結果。對于各層調用的現(xiàn)場存儲和恢復,由程序自動實現(xiàn),無需人工干預。因此,在遞歸程序的設計中,關鍵是找出調用所需的參數(shù)、返回的結果以及遞歸調用結束的條件。例如在階乘函數(shù)fact(n)中,每層需要傳遞一個自然數(shù)n,返回n*fact(n-1),遞歸調用結束的條件為n=0,因此可以方便地編寫相應的程序