遞迴 演算法題解2

2021-07-15 16:17:42 字數 2091 閱讀 9108

選擇b:

遞迴工作棧裡面包括返回位址、本層的區域性變數和遞迴呼叫的形參代換用實參,所以正常情況下,無論遞迴過程有沒有使用區域性變數,轉換為非

遞迴過程

都需要用棧來模擬這個遞迴呼叫過程。

當然,有一些特殊遞迴不用棧就可以直接轉換,比如尾遞迴、常係數遞推等,無論是否有區域性變數

直接排除ad,注意力集中在b和c。

b肯定是對的,只有一次迴圈滿足某個條件,不呼叫自己就返回,遞迴才會一層一層向上返回。

那麼c呢,想一下,全域性變數和引數確實可以用來控制遞迴的結束與否。 

該不該選c呢?再仔細看一下題目(說實話,我很討厭這種文字遊戲),「這個函式一定...「,所以,問題集中在,是否是一定會使用這兩種方式呢? 顯然

不是的。

除了c中提到的兩種情況外,還有如下控制遞迴的方式: 

1. 區域性靜態變數是可以控制遞迴函式最終結束的

2. 可能通過異常來控制遞迴的結束。 

3. 可以利用bios或os的一些資料或一些標準庫的全域性值來控制遞迴過程的終止。 

4. 可以把一些資料寫入到bios或os的系統資料區,也可以把資料寫入到乙個檔案中,以此來控制遞迴函式的終止。

所以,答案為b

類似斐波那契數列的思想,若所求方法表示為f(n),因為當台階大於3時,可看做是

f(n)=f(n-1)+f(n-2)+f(n-3);//因為踏入最後一節階梯有三種方法,最後一步是一步,兩步,三步。

**如下:

an = an-1 + 1  推出遞推公式為an=n+1,即ack(1,n)=n+2

ack(2,n) = ack(1,ack(2,n-1))=ack(2,n-1)+2

ack(2,0) = ack(1,1)=3

類似的:ack(2,n)= 2n+3

ack(3,n) = ack(2,ack(3,n-1))= 2ack(3,n-1)+3

ack(3,n) + 3 = 2(ack(3,n-1) + 3)

ack(3,0) = 5

等比公式:

ack(3,n)=2^(n+3)-3 

故:ack(3,3)=61

遞迴演算法 2

author sunnymoon 概念介紹 遞迴的二分查詢 想用最少的比較次數在乙個有序的陣列中找到乙個給定的資料項。非遞迴的二分查詢 二分查詢也可以用非遞迴的演算法,但是分治演算法通常要回到遞迴。分治算 法常常是乙個方法,在這個方法中含有兩個對自身的遞迴的呼叫。分治演算法 遞迴的二分查詢是分治演算...

演算法基礎 遞迴2

基礎概念 演算法基礎 遞迴1 任務描述 設有集合s 生成該集合中元素的所有排列 容易想到,s的所有排列即ai s 的所有情形,這正符合遞迴形式的定義 下面先用vector傳值實現演算法 include include include using namespace std void permute ...

演算法題解 遞迴 母牛的數量

description有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。請程式設計實現在第n年的時候,共有多少頭母牛?input輸入資料由多個測試例項組成,每個測試例項佔一行,包括乙個整數n 0output對於每個測試例項,輸出在第n年的時候母牛的數量。每個輸出...