構造遞迴函式典例

2021-09-18 09:08:00 字數 954 閱讀 3867

原題如下:

我們要求找出具有下列性質數的個數(包含輸入的自然數nnn):

先輸入乙個自然數n(n≤1000),然後對此自然數按照如下方法進行處理:

不作任何處理;

在它的左邊加上乙個自然數,但該自然數不能超過原數的一半;

加上數後,繼續按此規則進行處理,直到不能再加自然數為止.

輸入格式:

1個自然數n(n≤1000)

輸出格式:

1個整數,表示具有該性質數的個數。

輸入樣例#1: 輸出樣例#1:

6 6說明

滿足條件的數為

6,16,26,126,36,136

下面是我的**:

#includemain()

int func(int x)

return cnt;

}

問題說明:每乙個數n可以在其左邊與之組合的數(<=n/2)需要自身先與該數(n)組合,再將能與n/2組合的所有數與n組合。

所以很明顯這是乙個遞迴問題。

遞迴問題的關鍵是如何構造乙個遞迴函式,下面是這道題的構造思路:

①n=1時,n/2=0,只有1自身,該函式應計算出1。

②n=2時,n/2=1,所以1及能與1組合的數首先都能單獨與2組合,然後能與1組合的數與1形成的組合體本身也可與2組合。

③(1)首先計入n自身

(2)所有能與n組合的數首先自身應滿足<=n/2,所以可用for迴圈,使之出現由1~<=n/2的數;

(3) 在迴圈體中,首先應做的是對這些數進行統計,因為i滿足<=n/2,i自身是可以直接與n組合的,即每個i與n形成的組合是需要計入的。

(4)每個i自身又是需要把i當做n再做相同的步驟。所以這裡需要呼叫函式自身。

④在函式體內部呼叫函式本身時,可將函式理解為乙個黑匣子,它的作用就是計算出復合條件的所有數的數目。

構造好函式,帶入main函式直接使用即可。

遞迴函式(詳例)

從函式棧的角度的運用 簡單的列印運用 includevoid function int n int main void function int n return 非空鍊錶的遞迴找最大值 lim findmax lim headptr 為了更好的理解遞迴的執行過程 在呼叫自生到最後時,if head...

javascript(一)建構函式遞迴

最近專案中有個需求,react專案中做乙個選單配置項的功能,即傳入某個url的引數,匹配出選單資料內該選單內的子選單項及其元件。資料體 選單配置項 export const menus 即進入usermanage元件,傳入 usermanage 匹配出該選單下的子選單項。import from ro...

儲存器典例

設某計算機的位址暫存器為16位,資料暫存器都是8位。欲用16k 1位的sram構成該計算機的 記憶體儲器,請問 記憶體的最大容量為多少字?共需要多少sram晶元?片內定址需要多少地 址位?片選訊號需要多少位址位?解 1 2 16 8 8 64kb 2 2 16 8 16k 1 32 3 16k 2 ...