當前位置:編程學習大全網 - 編程語言 - 什麽是遞推法和遞歸法

什麽是遞推法和遞歸法

問題壹:什麽是遞推法和遞歸法?兩者在思想有何聯系 程序調用自身的編程技巧稱為遞歸。遞歸做為壹種算法在程序設計語言中廣泛應用。 壹個過程或函數在其定義或說明中有直接或間接調用自身的壹種方法,它通常把壹個大型復雜的問題層層轉化為壹個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。

遞推算法是壹種用若幹步可重復的簡運算(規律)來描述復雜問題的方法。遞推是序列計算機中的壹種常用算法。它是按照壹定的規律來計算序列中的每個項,通常是通過計算機前面的壹些項來得出序列中的指定象的值。

叠代是重復反饋過程的活動,其目的通常是為了逼近所需目標或結果。每壹次對過程的重復稱為壹次“叠代”,而每壹次叠代得到的結果會作為下壹次叠代的初始值。

問題二:遞推和遞歸算法有什麽區別 遞歸指自我調用的函數,自己調用自己;遞推指重復進行的過程,重復進行壹個過程,

問題三:的遞推和遞歸方法的區別是什麽 遞歸就是自己調用自己吧!

遞推是從頭向後推吧!

問題四:遞推和遞歸算法有什麽區別 遞歸就是自己調用自己吧!

遞推是從頭向後推吧!

問題五:遞推和遞歸的區別是什麽 1.遞歸:將問題規模為n的問題,降解成若幹個規模為n-1的問題,依次降解,直到問題規模可求,求出低階規模的解,代入高階問題中,直至求出規模為n的問題的解。

2.遞推:構造低階的規模(如規模為i,壹般i=0)的問題,並求出解,推導出問題規模為i+1的問題以及解,依次推到規模為n的問題。

3.遞歸包括回溯和遞推兩個過程。

最好的例子是斐波那契數列: 1 1 2 3 5 8 13 21 ... ...

總結成公式就是F(n+1)=F(n)+F(n-1), F(0)=F(1)=1;

妳可以用遞歸的方法寫這個函數:

int F(int n) {

if (n 問題六:遞推算法和遞歸算法有什麽區別 遞推就是從前往後推,遞歸還有個回溯的過程

舉個例子,數列:1,1,2,3,5,8,13,21,……

要求第100項,就得從前兩項開始推,直到第100項,是壹個遞推的過程

f[0]=f[1]=1;

for(i=2;i 問題七:遞推法和遞歸法兩者在思想有何聯系 兩者是壹樣的,沒有本質區別。

問題八:遞推算法的遞推與遞歸的比較 相對於遞歸算法,遞推算法免除了數據進出棧的過程,也就是說,不需要函數不斷的向邊界值靠攏,而直接從邊界出發,直到求出函數值.比如階乘函數:f(n)=n*f(n-1)在f(3)的運算過程中,遞歸的數據流動過程如下:f(3){f(i)=f(i-1)*i}-->f(2)-->f(1)-->f(0){f(0)=1}-->f(1)-->f(2)--f(3){f(3)=6}而遞推如下:f(0)-->f(1)-->f(2)-->f(3)由此可見,遞推的效率要高壹些,在可能的情況下應盡量使用遞推.但是遞歸作為比較基礎的算法,它的作用不能忽視.所以,在把握這兩種算法的時候應該特別註意。 所謂順推法是從已知條件出發,逐步推算出要解決的問題的方法叫順推。如斐波拉契數列,設它的函數為f(n),已知f(1)=1,f(2)=1;f(n)=f(n-2)+f(n-1)(n>=3,n∈N)。則我們通過順推可以知道,f(3)=f(1)+f(2)=2,f(4)=f(2)+f(3)=3……直至我們要求的解。 所謂逆推法從已知問題的結果出發,用叠代表達式逐步推算出問題的開始的條件,即順推法的逆過程,稱為逆推。

問題九:什麽是遞歸算法 遞歸算法就是壹個函數通過不斷對自己的調用而求得最終結果的壹種思維巧妙但是開銷很大的算法。

比如:

漢諾塔的遞歸算法:

void move(char x,char y){

printf(%c-->%c\n,x,y);

}

void hanoi(int n,char one,char two,char three){

/*將n個盤從one座借助two座,移到three座*/

if(n==1) move(one,three);

else{

hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);

}

}

main(){

int n;

printf(input the number of diskes:);

scanf(%d,&n);

printf(The step to moving %3d diskes:\n,n);

hanoi(n,'A','B','C');

}

我說下遞歸的理解方法

首先:對於遞歸這壹類函數,妳不要糾結於他是幹什麽的,只要知道他的壹個模糊功能是什麽就行,等於把他想象成壹個能實現某項功能的黑盒子,而不去管它的內部操作先,好,我們來看下漢諾塔是怎麽樣解決的

首先按我上面說的把遞歸函數想象成某個功能的黑盒子,void hanoi(int n,char one,char two,char three); 這個遞歸函數的功能是:能將n個由小到大放置的小長方形從one 位置,經過two位置 移動到three位置。那麽妳的主程序要解決的問題是要將m個的漢諾塊由A借助B移動到C,根據我們上面說的漢諾塔的功能,我相信傻子也知道在主函數中寫道:hanoi(m,A,B,C)就能實現將m個塊由A借助B碼放到C,對吧?所以,mian函數裏面有hanoi(m,'A','C','B');這個調用。

接下來我們看看要實現hannoi的這個功能,hannoi函數應該幹些什麽?

在hannoi函數裏有這麽三行

hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);

同樣以黑盒子的思想看待他,要想把n個塊由A經過B搬到C去,是不是可以分為上面三步呢?

這三部是:第壹步將除了最後最長的那壹塊以外的n-1塊由one位置經由three搬到two 也就是從A由C搬到B 然後把最下面最長那壹塊用move函數把他從A直接搬到C 完事後 第三步再次將剛剛的n-1塊借助hanno處函數的功能從B由A搬回到C 這樣的三步實習了n塊由A經過B到C這樣壹個功能,同樣妳不用糾結於hanoi函數到底如何實現這個功能的,只要知道他有這麽壹個神奇的功能就行

最後:遞歸都有收尾的時候對吧,收尾就是當只有壹塊的時候漢諾塔怎麽個玩法呢?很簡單吧,直接把那壹塊有Amove到C我們就完成了,所以hanoni這個函數最後還要加上 if(n==1)move(one,three);(當只有壹塊時,直接有Amove到C位置就行)這麽壹個條件就能實現hanoin函數n>=1時......>>

問題十:遞歸和遞推有什麽不壹樣。用起來哪個快壹些 遞推就是遞推循環,遞推或者說循環比遞歸更容易理解和運用,但遞歸算法在運行速度上更快,代碼也比較簡潔。遞歸算法也有缺點,主要是空間消耗比較大。從數學上說,所有的遞歸算法都可以用遞推(循環)算法代替,但不是所有的循環算法都可以被遞歸代替。

  • 上一篇:自己怎麽寫
  • 下一篇:計算機的作用和意義
  • copyright 2024編程學習大全網