函式遞迴呼叫和迴圈語句使用的區別是什麼

2023-02-12 17:25:03 字數 2729 閱讀 7663

1樓:匿名使用者

遞迴,具體的我也說不清楚,一般用在比較特殊的地方,用求得的值作為引數再求值,依賴算出的結果,比如算派(π)

迴圈,我覺得主要用在做一些比較有規律的事情上,比如處理陣列,迴圈輸出陣列或list中的資料,或者做排序和求和,在執行的時候不依賴之前的結果。

這兩種方法解決的事情不同,多寫些程式就能體會出來,個人感覺迴圈學起來要比遞迴簡單得多,但在處理一些演算法問題的時候使用遞迴將比使用迴圈要更簡單,更高效。

這是知道裡部分介紹遞迴:

一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。

注意: (1) 遞迴就是在過程或函式裡呼叫自身;

(2) 在使用遞增歸策略時,必須有乙個明確的遞迴結束條件,稱為遞迴出口。

遞迴演算法一般用於解決三類問題:

(1)資料的定義是按遞迴定義的。(fibonacci函式)

(2)問題解法按遞迴演算法實現。(回溯)

(3)資料的結構形式是按遞迴定義的。(樹的遍歷,圖的搜尋)

2樓:聲帶大企心

實際上沒什麼區別,我認為區別就是遞迴函式是可以重複使用的,而for迴圈只能在乙個地方用,不過你要是把for迴圈寫在函式裡,就沒什麼大區別了。

(j**a方法遞迴) 剛學方法遞迴,但感覺和迴圈語句差不多,有沒有人講解下兩者區別。謝謝

3樓:匿名使用者

1、差別還是比較大的,或許,迴圈可以實現的遞迴也可以實現,但遞迴較容易實現的,迴圈就很難。

2、根據求斐波那契數列來說。

package ;

import ;

/**實現斐波拉切函式。

* 斐波拉切數列:

* 由0和1開始,之後的費波那西係數就由之前的兩數相加,* 數列形式如下:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,……

* 在數學上,是以遞迴的方法來定義:

* f_0=0

* f_1=1

* f_n = f_+ f_

* 實現需求:輸入序號n返回得到對應費波那西數。

* @author admin**/

public class fibonacci */

"斐波那契數列30項以內的第n項的和為:")

for (int j = 1; j <=20; j++)

}//遞迴函式實現數列。

public static int getfibonacco(int i) else if (i==1 ||i==2) else }}

3、所謂遞迴,程式呼叫自身的程式設計技巧稱為遞迴( recursion),迴圈是什麼?在一定的條件下重複的執行,這個『固定』的重複叫迴圈,你思考如果迴圈,怎麼求斐波那契數列?

c語言,迴圈語句為什麼會比遞迴語句跑的快

4樓:

遞迴要增加執行緒,相當於巢狀函式,額外工作多。

5樓:匿名使用者

遞迴在運算的本質上與迴圈相同,一次遞迴就相當於一次迴圈,但遞迴是函式呼叫,與迴圈相比有很大的開銷:引數壓棧;當前指令執行指標pc跳轉導致cpu指令快取失效,等等,這些因素導致遞迴比迴圈緩慢。

c語言不支援尾遞迴優化,對於支援尾遞迴優化的語言來說,按尾遞迴的寫法(對遞迴函式的呼叫是函式中的最後一行),語言會把遞迴優化成迴圈指令,這樣兩者就沒區別了。

遞迴函式f(n)的遞迴演算法是什麼?

6樓:我是乙個麻瓜啊

遞迴就是本身呼叫自己。如n!=n(n-1)!,你定義函式f(n)=nf(n-1)而f(n-1)又是這個定義的函式。這就是遞迴。

實現遞迴。簡單說來從未知的推到已知的。

如:3!=3*2!

1!=1(已知的)

然後從已知再返**用給上一層。到你所要求的1!=1(已知)

遞迴結束。

7樓:匿名使用者

你先了解這個函式的作用,結果就是 n*(n/(2^1)*(n/(2^2))*n/(2^3))*n/(2^4))…1

n*(n/2)*(n/4)*(n/8)*…1while( n >=0)

else}double result = 1;

while(棧不為空)

printf("%lf",result);

這個是偽**哈,自己去實現。

vb請分別用迴圈語句和遞迴方式設計乙個function過程sigma(n),實現整數1到n的累加,返回值為整型integer.

8樓:guoxin愛記錄

迴圈:function sigma(byval n as integer) as integer '迴圈。

dim tmp as integer

for i = 1 to n

tmp = tmp + i

next i

sigma = tmp

end function

遞迴:function sigma(byval n as integer) as integer '遞迴。

if n = 1 then

sigma = 1

elsesigma = n + sigma(n - 1)end if

end function

二級C語言一道上機題 關於函式的遞迴呼叫

if n 1 return n fun n 1 return 1 如果 n 1 執行 return n fun n 1 否則執行 return 1 因為 main 函式裡呼叫的是 fun 10 所以對於 fun 函式,入口引數 n 等於10 10 大於 1,所以執行 return n fun n 1...

lua呼叫c和c函式呼叫lua的區別

乙個是lua呼叫c乙個是c呼叫lua,就像我用你的東西,和你用我的東西一樣。lua執行過程中,可以吧lua的乙個資料拿來傳遞給c裡面,然後c執行之後可以吧資料返回給lua,這就是lua呼叫c 反過來,c在執行的時候,把資料拿給lua做處理,然後c得到處理好的資料,這就是c呼叫lua。因為lua處理資...

如何使用VBS指令碼呼叫C 寫的DLL函式

先註冊dll 呼叫方法如下。set x createobject 工程名。類名 x.函式名。工程名就是編譯後的dll檔名跟vbs呼叫普通的dll檔案一樣的格式。注意 最快 那人說的是vbs呼叫api的方法 與你的要求並不相同你要的是呼叫自己寫的dll 用vbs也可以呼叫dll,具體方法是 到。把複製...