導航:首頁 > 知識科普 > 哪些問題只能用遞歸的方法

哪些問題只能用遞歸的方法

發布時間:2022-07-19 02:38:06

Ⅰ 遞歸函數通常是用來解決什麼問題的

遞歸函數通常用來解決結構自相似的問題。所謂結構自相似,是指構成原問題的子問題與原問題在結構上相似,可以用類似的方法解決。具體地,整個問題的解決,可以分為兩部分:第一部分是一些特殊情況,有直接的解法;第二部分與原問題相似,但比原問題的規模小。實際上,遞歸是把一個不能或不好解決的大問題轉化為一個或幾個小問題,再把這些小問題進一步分解成更小的問題,直至每個小問題都可以直接解決。因此,遞歸有兩個基本要素:
(1)邊界條件:確定遞歸到何時終止,也稱為遞歸出口。
(2)遞歸模式:大問題是如何分解為小問題的,也稱為遞歸體。遞歸函數只有具備了這兩個要素,才能在有限次計算後得出結果。
遞歸就是某個函數直接或間接地調用了自身,這種調用方式叫做遞歸調用。說白了,還是函數調用。既然是函數調用,那麼就有一個雷打不動的原則:所有被調用的函數都將創建一個副本,各自為調用者服務,而不受其他函數的影響。

Ⅱ 遞歸解決什麼樣的問題

這個 乍一說 還真不好解釋,遞歸函數都是自己調用自己的,應該是解決一些相對復雜的問題,一般能用遞歸解決的問題都能用非遞歸的方法解決。但是反過來就不一定了! 不知道對你有用沒用

Ⅲ 遞歸主方法

遞歸的主要方法是什麼?

一、遞歸演算法
遞歸演算法(英語:recursion algorithm)在計算機科學中是指一種通過重復將問題分解為同類的子問題而解決問題的方法。遞歸式方法可以被用於解決很多的計算機科學問題,因此它是計算機科學中十分重要的一個概念。絕大多數編程語言支持函數的自調用,在這些語言中函數可以通過調用自身來進行遞歸。計算理論可以證明遞歸的作用可以完全取代循環,因此在很多函數編程語言(如Scheme)中習慣用遞歸來實現循環。
二、遞歸程序
在支持自調的編程語言中,遞歸可以通過簡單的函數調用來完成,如計算階乘的程序在數學上可以定義為:

這一程序在Scheme語言中可以寫作:
1
(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))
不動點組合子
即使一個編程語言不支持自調用,如果在這語言中函數是第一類對象(即可以在運行期創建並作為變數處理),遞歸可以通過不動點組合子(英語:Fixed-point combinator)來產生。以下Scheme程序沒有用到自調用,但是利用了一個叫做Z 運算元(英語:Z combinator)的不動點組合子,因此同樣能達到遞歸的目的。
1
(define Z (lambda (f) ((lambda (recur) (f (lambda arg (apply (recur recur) arg)))) (lambda (recur) (f (lambda arg (apply (recur recur) arg)))))))(define fact (Z (lambda (f) (lambda (n) (if (<= n 0) 1 (* n (f (- n 1))))))))
這一程序思路是,既然在這里函數不能調用其自身,我們可以用 Z 組合子應用(application)這個函數後得到的函數再應用需計算的參數。
尾部遞歸
尾部遞歸是指遞歸函數在調用自身後直接傳回其值,而不對其再加運算。尾部遞歸與循環是等價的,而且在一些語言(如Scheme中)可以被優化為循環指令。 因此,在這些語言中尾部遞歸不會佔用調用堆棧空間。以下Scheme程序同樣計算一個數字的階乘,但是使用尾部遞歸:
1
(define (factorial n) (define (iter proct counter) (if (> counter n) proct (iter (* counter proct) (+ counter 1)))) (iter 1 1))
三、能夠解決的問題
數據的定義是按遞歸定義的。如Fibonacci函數。
問題解法按遞歸演算法實現。如Hanoi問題。
數據的結構形式是按遞歸定義的。如二叉樹、廣義表等。
四、遞歸數據
數據類型可以通過遞歸來進行定義,比如一個簡單的遞歸定義為自然數的定義:「一個自然數或等於0,或等於另一個自然數加上1」。Haskell中可以定義鏈表為:
1
data ListOfStrings = EmptyList | Cons String ListOfStrings
這一定義相當於宣告「一個鏈表或是空串列,或是一個鏈表之前加上一個字元串」。可以看出所有鏈表都可以通過這一遞歸定義來達到。

Ⅳ 什麼情況下要用到遞歸演算法C語言中的

在一個子程序(過程或函數)的定義中又直接或間接地調用該子程序本身,稱為遞歸。
遞歸是一種非常有用的程序設計方法。用遞歸演算法編寫的程序結構清晰,具有很好的可讀性。
遞歸演算法的基本思想是:把規模大的、較難解決的問題變成規模較小的、易解決的同一問題。規模較小的問題又變成規模更小的問題,並且小到一定程度可以直接得出它的解,從而得到原來問題的解。
利用遞歸演算法解題,首先要對問題的以下三個方面進行分析:
把這些步驟或等式確定下來。 把以上三個方面分析好之後,就可以在子程序中定義遞歸調用。記得C裡面有一個漢諾塔,就是非用遞歸才能解決的一個問題!可以仔細理解一下哦!

Ⅳ 只能用遞歸求解的問題都有哪些

1、程序調用自身的編程技巧稱為遞歸。遞歸做為一種演算法在程序設計語言中廣泛應用。 一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只...

Ⅵ 什麼情況下可以利用遞歸來解決問題再寫遞歸程序時應注意是什麼

比如階乘,也就是說求n可以先求n-1,以此類推,到1,這類問題都可以用遞歸解決,菲波拉鍥數也可以遞歸。因為遞歸是總是調用自身解決問題,所以,必須有結束條件,否則會出問題,導致內存卡爆

Ⅶ 在什麼情況下可以用遞歸解決問題在寫遞歸程序時的原則

1.當某個特性可以被重復執行時,就可以用遞歸來解決。使用遞歸某些時候可以減少一些代碼量。比如編程題里常見的一道題,求斐波拉切數列:

publicstaticintfeibolaqie(intnum)
{
if(num<3)//若num的值為1或2,則返回1
{
return1;
}
else
{
returnfeibolaqie(num-1)+feibolaqie(num-2);
}
}

該函數作用是求出並返回第num位的斐波拉契數列的值。這裡面就用到了遞歸。如果採用常規邏輯來做這道題,要寫的代碼就得多一些。

2.在寫遞歸時要注意的原則就是,必須讓遞歸函數有結束的機會。如果沒有添加任何條件阻止遞歸的循環,那麼就會無限執行下去。

3.日常開發中用遞歸的可能性很小,當然偶爾搞一搞也是可以。但必須注意不能寫錯而影響系統運行,另外一定要寫上注釋,讓以後自己和其他開發者都能明白該遞歸函數的功能。

Ⅷ 什麼類型的問題用遞歸法解決

遞歸演算法本來就是一種效率比較低的演算法,但是其優點是很明顯的,它能夠大幅度降低程序設計的復雜性,非常容易理解。對於對時間復雜度要求較高的程序不適合用遞歸演算法。

Ⅸ 適合用遞歸演算法求解的問題的充分必要條件是什麼

先來理解下概念:遞歸過程一般通過函數或子過程來實現。遞歸方法:在函數或子過程的內部,直接或者間接地調用自己的演算法。

充分必要條件是:問題具有某種可借用的類同自身的子問題描述的性質;某一有限步的子問題(也稱本原問題)有直接的解存在。

注意:遞歸演算法解題通常顯得很簡潔,但遞歸演算法解題的運行效率較低。所以一般不提倡用遞歸演算法設計程序。 在遞歸調用的過程當中系統為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等。所以一般不提倡用遞歸演算法設計程序。

可以自己寫幾個就知道了

Ⅹ 請問運用遞歸關系的三個條件是什麼

1、可以把要解決的問題轉化為一個新問題,而這個新的題的解決方法仍與原來的解決方法相同,只是所處理的對象有規律地遞增或遞減。

2、可以應用這個轉化過程使問題得到解決。

3、必定要有一個明確的結束遞歸的條件。

例如:

public class X {

public static void main(String[] args){

int x =new X(). x(100);

System.out.println(x);

}

//1~n 的累加遞歸

public int x(int n){

return n>1?n+x(--n):n;

}

}

(10)哪些問題只能用遞歸的方法擴展閱讀

設(a0,a1,...,ar,...)是一個序列,把該序列中的ar和它前面的幾個ai(0≤i<r)關聯起來的方程一個遞歸關系。如關系式:ar=3ar-1(r≥1)和錯排數,Dn=(n-1)(Dn-1+Dn-2) (n=3,4,...),都是遞歸關系。

有時也稱遞歸關系式為差分方程。為了能從遞歸關系式計算出序列的每一項,必須知道序列開始的一個或幾個數,稱這樣的數為初始條件或初始值。

在許多情況下,得到遞歸關系式本身就是朝解決一個計數問題邁了一大步。即使不能從這個遞歸關系式很快地解出它的一般表達式,這也是相當不錯的了。這是因為採取逐步計算的方法可以得到序列各項的值。有些例子說明,沒有遞歸關系,計算的可能性根本就不存在。

閱讀全文

與哪些問題只能用遞歸的方法相關的資料

熱點內容
醫院設備經濟效益分析方法 瀏覽:379
點痣留下的紅印怎麼去除簡單方法 瀏覽:803
賓得k50跑焦解決方法 瀏覽:509
湖南情感挽回方法操作步驟 瀏覽:26
綁氣球串最簡單的方法 瀏覽:388
骨頭疏鬆最佳鍛煉方法 瀏覽:267
蒼耳葉的使用方法有哪些 瀏覽:86
優米手機root方法 瀏覽:292
鑄工塵肺的症狀及治療方法 瀏覽:795
汽車點煙器偶爾斷電解決方法 瀏覽:48
萬能的鍛煉方法 瀏覽:114
後麓茸面膜使用方法 瀏覽:841
電腦越獄使用方法 瀏覽:800
胎壓監測的使用方法和步驟 瀏覽:582
研學課題的研究方法和步驟怎麼寫 瀏覽:365
鍛煉清凈心的方法 瀏覽:81
解決牛市的方法 瀏覽:803
保護員工的最佳方法 瀏覽:837
小粉盒使用方法視頻 瀏覽:290
蔥油手工面製作步驟和方法圖片 瀏覽:808