放蘋果 遞迴與函式自呼叫演算法

2022-05-13 04:25:12 字數 887 閱讀 3027

描述:

把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?(用k表示)5,1,1和1,5,1 是同一種分法。輸入第一行是測試資料的數目t(0 <= t <= 20)。以下每行均包含二個整數m和n,以空格分開。1<=m,n<=10。輸出對輸入的每組資料m和n,用一行輸出相應的k。

樣例輸入

1

7 3

樣例輸出

8
**lwx@poj

思路**載自:

設f(m,n) 為m個蘋果,n個盤子的放法數目,則先對n作討論:

當n>m:必定有n-m個盤子永遠空著,去掉它們對擺放蘋果方法數目不產生影響。即if(n>m) f(m,n) = f(m,m)  

當n<=m:不同的放法可以分成兩類:

1、有至少乙個盤子空著,即相當於f(m,n) = f(m,n-1);  

2、所有盤子都有蘋果,相當於可以從每個盤子中拿掉乙個蘋果,不影響不同放法的數目,即f(m,n) = f(m-n,n).

而總的放蘋果的放法數目等於兩者的和,即 f(m,n) =f(m,n-1)+f(m-n,n)

遞迴出口條件說明:

當n=1時,所有蘋果都必須放在乙個盤子裡,所以返回1;

當沒有蘋果可放時,定義為1種放法;

遞迴的兩條路,第一條n會逐漸減少,終會到達出口n==1;

第二條m會逐漸減少,因為n>m時,我們會return f(m,m) 所以終會到達出口m==0.

這題也是noip2014普及組初賽的試題哦!

**如下:

1 #include2

int fun(int m,int

n) 311

12int

main()

1321 }

數的計算 遞迴與函式自呼叫演算法

題目描述description 我們要求找出具有下列性質數的個數 包含輸入的自然數n 先輸入乙個自然數n n 1000 然後對此自然數按照如下方法進行處理 1.不作任何處理 2.在它的左邊加上乙個自然數,但該自然數不能超過原數的一半 3.加上數後,繼續按此規則進行處理,直到不能再加自然數為止.輸入輸...

c 遞迴演算法 放蘋果

1.題目描述 小蒜想知道把 m個同樣的蘋果放在 n個同樣的盤子裡,允許有的盤子空著不放,共有多少種不同的分法?用 k表示 5,1,1和 1,5,1 是同一種分法。輸入格式 第一行是測試資料的數目 t 0 t 20 以下每行均包含兩個整數 m和 n,以空格分開。1 m,n 10。輸出格式 對輸入的每組...

等差數列問題 遞迴與函式自呼叫演算法

題目描述 description 給定n n 1 用遞迴的方法計算1 2 3 4 n 1 n 輸入輸出格式input output 輸入格式 一行,乙個數n 輸出格式 一行,結果 輸入輸出樣例sample input output 樣例測試點 1 輸入樣例 3輸出樣例 6 思路 執行程式,當t 5時...