選擇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年的時候母牛的數量。每個輸出...