當前位置:首頁 » 操作系統 » 中遞歸演算法

中遞歸演算法

發布時間: 2024-08-01 23:52:45

❶ 什麼是遞推法和遞歸法

問題一:什麼是遞推法和遞歸法?兩者在思想有何聯系 程序調用自身的編程技巧稱為遞歸。遞歸做為一種演算法在程序設計語言中廣泛應用。 一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。
遞推演算法是一種用若干步可重復的簡運算(規律)來描述復雜問題的方法。遞推是序列計算機中的一種常用演算法。它是按照一定的規律來計算序列中的每個項,通常是通過計算機前面的一些項來得出序列中的指定象的值。
迭代是重復反饋過程的活動,其目的通常是為了逼近所需目標或結果。每一次對過程的重復稱為一次「迭代」,而每一次迭代得到的結果會作為下一次迭代的初始值。

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

問題三:的遞推和遞歸方法的區別是什麼 遞歸就是自己調用自己吧!
遞推是從頭向後推吧!

問題四:遞推和遞歸演算法有什麼區別 遞歸就是自己調用自己吧!
遞推是從頭向後推吧!

問題五:遞推和遞歸的區別是什麼 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時......>>

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

❷ 閫掑綊綆楁硶鐨勭粡鍏鎬緥瀛

鍏蜂綋濡備笅銆
閫掑綊闃朵箻n!=n*(n-1)*(n-2)*...*1(n>0)(Integern){if(n==1){奼夎哄旈棶棰榩ublicstaticvoidhanio(intn錛宑hara錛宑harb錛宑harc){鍒ゅ畾涓緋誨垪瀛楃︿覆涓鏄鍚︽湁鐩稿悓鐨勫唴瀹筽ublicclassCrf銆
閫掑綊綆楁硶錛堣嫳璇錛歳ecursionalgorithm錛夊湪璁$畻鏈虹戝︿腑鏄鎸囦竴縐嶉氳繃閲嶅嶅皢闂棰樺垎瑙d負鍚岀被鐨勫瓙闂棰樿岃В鍐抽棶棰樼殑鏂規硶銆傞掑綊寮忔柟娉曞彲浠ヨ鐢ㄤ簬瑙e喅寰堝氱殑璁$畻鏈虹戝﹂棶棰橈紝鍥犳ゅ畠鏄璁$畻鏈虹戝︿腑鍗佸垎閲嶈佺殑涓涓姒傚康銆傜粷澶у氭暟緙栫▼璇璦鏀鎸佸嚱鏁扮殑鑷璋冪敤錛屽湪榪欎簺璇璦涓鍑芥暟鍙浠ラ氳繃璋冪敤鑷韜鏉ヨ繘琛岄掑綊銆傝$畻鐞嗚哄彲浠ヨ瘉鏄庨掑綊鐨勩

❸ 遞推演算法和遞歸演算法有什麼區別

1、演算法的過程不同

遞推演算法是一種簡單的演算法,即通過已知條件,利用特定關系得出中間推論,直至得到結果的演算法。

遞歸演算法在計算機科學中是指一種通過重復將問題分解為同類的子問題而解決問題的方法。遞歸式方法可以被用於解決很多的計算機科學問題,因此它是計算機科學中十分重要的一個概念。

❹ 請問遞歸演算法的時間復雜度如何計算呢

遞歸演算法的時間復雜度在演算法中,當一個演算法中包含遞歸調用時,其時間復雜度的分析會轉化為一個遞歸方程求解,常用以下四種方法:

1.代入法(Substitution Method)

代入法的基本步驟是先推測遞歸方程的顯式解,然後用數學歸納法來驗證該解是否合理。

2.遞歸程序設計是程序設計中常用的一種方法,它可以解決所有有遞歸屬性的問題,並且是行之有效的.

3.但對於遞歸程序運行的效率比較低,無論是時間還是空間都比非遞歸程序更費,若在程序中消除遞歸調用,則其運行時間可大為節省.

java中遞歸演算法是什麼怎麼算的

Java遞歸演算法是基於Java語言實現的遞歸演算法。遞歸演算法是一種直接或者間接調用自身函數或者方法的演算法。遞歸演算法實質是把問題分解成規模縮小的同類問題的子問題,然後遞歸調用方法表示問題的解。遞歸往往能給我們帶來非常簡潔非常直觀的代碼形式,從而使我們的編碼大大簡化,然而遞歸的思維確實跟我們的常規思維相逆的,通常都是從上而下的思維問題,而遞歸趨勢從下往上的進行思維。

二、遞歸演算法解決問題的特點:

【1】遞歸就是方法里調用自身。

【2】在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。

【3】遞歸演算法代碼顯得很簡潔,但遞歸演算法解題的運行效率較低。所以不提倡用遞歸設計程序。

【4】在遞歸調用的過程中系統為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等,所以一般不提倡用遞歸演算法設計程序。

【5】在做遞歸演算法的時候,一定把握出口,也就是做遞歸演算法必須要有一個明確的遞歸結束條件。這一點是非常重要的。其實這個出口就是一個條件,當滿足了這個條件的時候我們就不再遞歸了。

三、代碼示例:

代碼執行流程圖如下:

此程序中n=5就是程序的出口。

❻ 遞歸演算法

遞歸演算法
遞歸演算法流程
遞歸過程一般通過函數或子過程來實現。遞歸演算法:在函數或子過程的內部,直接或者間接地調用自己的演算法。
遞歸演算法的特點
遞歸演算法是一種直接或者間接地調用自身的演算法。在計算機編寫程序中,遞歸演算法對解決一大類問題是十分有效的,它往往使演算法的描述簡潔而且易於理解。 遞歸演算法解決問題的特點: (1) 遞歸就是在過程或函數里調用自身。 (2) 在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。 (3) 遞歸演算法解題通常顯得很簡潔,但遞歸演算法解題的運行效率較低。所以一般不提倡用遞歸演算法設計程序。 (4) 在遞歸調用的過程當中系統為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等。所以一般不提倡用遞歸演算法設計程序。
遞歸演算法要求
遞歸演算法所體現的「重復」一般有三個要求: 一是每次調用在規模上都有所縮小(通常是減半); 二是相鄰兩次重復之間有緊密的聯系,前一次要為後一次做准備(通常前一次的輸出就作為後一次的輸入); 三是在問題的規模極小時必須用直接給出解答而不再進行遞歸調用,因而每次遞歸調用都是有條件的(以規模未達到直接解答的大小為條件),無條件遞歸調用將會成為死循環而不能正常結束。
舉例
描述:把一個整數按n(2<=n<=20)進製表示出來,並保存在給定字元串中。比如121用二進製表示得到結果為:「1111001」。 參數說明:s: 保存轉換後得到的結果。 n: 待轉換的整數。 b: n進制(2<=n<=20) void numbconv(char *s, int n, int b) { int len; if(n == 0) { strcpy(s, ""); return; } /* figure out first n-1 digits */ numbconv(s, n/b, b); /* add last digit */ len = strlen(s); s[len] = ""[n%b]; s[len+1] = '\0'; } void main(void) { char s[20]; int i, base; FILE *fin, *fout; fin = fopen("palsquare.in", "r"); fout = fopen("palsquare.out", "w"); assert(fin != NULL && fout != NULL); fscanf(fin, "%d", &base); /*PLS set START and END*/ for(i=START; i <= END; i++) { numbconv(s, i*i, base); fprintf(fout, "%s\n", s); } exit(0); }
編輯本段遞歸演算法簡析(PASCAL語言)
遞歸是計算機科學的一個重要概念,遞歸的方法是程序設計中有效的方法,採用遞歸編寫 程序能是程序變得簡潔和清晰.
一 遞歸的概念
1.概念 一個過程(或函數)直接或間接調用自己本身,這種過程(或函數)叫遞歸過程(或函數). 如: procere a; begin . . . a; . . . end; 這種方式是直接調用. 又如: procere c(形參);forward; procere b; 局部說明 begin . . c(實參); . . end; procere c; 局部說明; begin . . b; . . end; 這種方式是間接調用. 例1計算n!可用遞歸公式如下: fac:=n*fac(n-1) {當n>0時} fac(n)={ fac:=1; { 當n=0時} 可編寫程序如下: program facn; var n:integer; function fac(n:integer):real; begin if n=0 then fac:=1 else fac:=n*fac(n-1); end; begin write('n=');readln(n); writeln(n,'!=',fac(n):0:0); end. 例2 樓梯有n階台階,上樓可以一步上1階,也可以一步上2階,編一程序計算共有多少種不同的走法. 設n階台階的走法數為f(n) 顯然有 n=1 f(n)={ f(n-1)+f(n-2) n>2 可編程序如下: program louti; var n:integer; function f(x:integer):integer; begin if x=1 then f:=1 else if x=2 then f:=2 else f:=f(x-1)+f(x-2); end; begin write('n=');read(n); writeln('f(',n,')=',f(n)) end.
二 如何設計遞歸演算法
1.確定遞歸公式 2.確定邊界(終了)條件
三 典型例題
例3 漢諾塔問題 如圖:已知有三根針分別用1,2,3表示,在一號針中從小放n個盤子,現要求把所有的盤子 從1針全部移到3針,移動規則是:使用2針作為過度針,每次只移動一塊盤子,且每根針上 不能出現大盤壓小盤.找出移動次數最小的方案. 程序如下: program hanoi; var n:integer; procere move(n,a,b,c:integer); begin if n=1 then writeln(a,'->',c) else begin move(n-1,a,c,b); writeln(a,'--->',c); move(n-1,b,a,c); end; end; begin write('Enter n='); read(n); move(n,1,2,3); end. 例4 快速排序 快速排序的思想是:先從數據序列中選一個元素,並將序列中所有比該元素小的元素都放到它的右邊或左邊,再對左右兩邊分別用同樣的方法處之直到每一個待處理的序列的長度為1, 處理結束. 程序如下: program kspv; const n=7; type arr=array[1..n] of integer; var a:arr; i:integer; procere quicksort(var b:arr; s,t:integer); var i,j,x,t1:integer; begin i:=s;j:=t;x:=b ; repeat while (b[j]>=x) and (j>i) do j:=j-1; if j>i then begin t1:=b; b:=b[j];b[j]:=t1;end; while (b<=x) and (i<j) do i:=i+1; if i<j then begin t1:=b[j];b[j]:=b;b:=t1; end until i=j; b:=x; i:=i+1;j:=j-1; if s<j then quicksort(b,s,j); if i<t then quicksort(b,i,t); end; begin write('input data:'); for i:=1 to n do read(a); writeln; quicksort(a,1,n); write('output data:'); for i:=1 to n do write(a:6); writeln; end.
編輯本段{遞歸的一般模式}
procere aaa(k:integer); begin if k=1 then (邊界條件及必要操作) else begin aaa(k-1); (重復的操作); end; end;
開放分類:
編程,計算機,演算法

引自:http://ke..com/view/1733593.htm

熱點內容
資料庫年薪 發布:2024-11-25 17:51:18 瀏覽:666
王者榮耀如何給賬號設置密碼 發布:2024-11-25 17:36:48 瀏覽:759
以巧克力為主寫一篇腳本 發布:2024-11-25 17:16:59 瀏覽:335
資料庫課時 發布:2024-11-25 16:57:50 瀏覽:451
dns伺服器名稱地址 發布:2024-11-25 16:57:49 瀏覽:932
如何給監控加訪問密碼 發布:2024-11-25 16:45:13 瀏覽:601
國外安卓音樂播放器哪個好 發布:2024-11-25 16:35:58 瀏覽:143
我的世界伺服器增加粒子 發布:2024-11-25 16:28:29 瀏覽:718
帶內核的安卓x86是什麼意思 發布:2024-11-25 16:27:01 瀏覽:273
php了解 發布:2024-11-25 16:16:26 瀏覽:934