2 遞迴與分治

2021-10-25 06:41:19 字數 850 閱讀 1680

遞迴的概念

直接或間接的呼叫自身的演算法稱為遞迴演算法

當乙個函式以及它的乙個變數是由函式自身定義時,稱這個函式是雙遞迴函式。【(ー`´ー)聽不懂,看下面分析】

分析:a(n,m)的自變數m的每乙個取值都定義了乙個單變數函式。

m=0時是+2

m=1時,a(1,1)=a(a(0,1),1)=a(1,0)=2,a(n,1)=a(a(n-1),1)=a(n-1,1)+2 (n>1),因此a(n,1)=2n(n≥1)

們m=2時,

a(n,2)=a(a(n-1,2),1)=2a(n-1,2)和a(1,2)=a(a(0,2),1)=a(1,1)=2,故a(n,2)=2^n

類似可以推出a(n,3)=2^ (2^(…)),2的層數為n

a(n,4)增長速度非常快,以至於沒有式子表達

單變數的ackerman函式a(n)定義為:a(n)=a(n,n),其擬逆函式α(n)=min,可以用來分析演算法複雜性

那麼:當a(0)=1、a(1)=2、a(2)=4、a(3)=16

α(1)=0,α(2)=1,α(3)=α(4)=2,α(5)=…=α(16)=3

,可以看出α(n)增長速度極慢。

a(4)=2^ (2^(…))

【(ーuー)你怎麼知道】,其中2的層數為65536,這個數非常大,無法用通常的方式表達它,如果要寫出這個位就需要log(a(4))位。所以,對於通常所見的正整數,有α(n)≤4

舉例:

【(quq)未完待續】

分治與遞迴

分治與遞迴 分治法的設計思想是,將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。對這k個子問題分別求解。如果子問題的規模仍然不夠小,則再劃分為k個子問題,如此遞迴的進行下去,直到問題規模足夠小,很容易求出其解為止。將求出的小規模的問題的解合併為乙個更大規模的問題的解...

遞迴與分治

一 1 求階乘 int factorial int n 2 fibonacci函式 int fibonacci int n 3 全排列 1 字串的全排列 主函式見 2 int permutation char a,int k,int m permutation arr,0,n 1 return 0 ...

遞迴與分治

fibonacci數列 無窮數列1,1,2,3,5,8,13,21,34,55,稱為fibonacci數列。它可以遞迴地定義為 第n個fibonacci數可遞迴地計算如下 int fibonacci int n 編寫完整的主函式,分別記錄利用上述遞迴函式求第47,48,49,50,51,52個fib...