題目:
計算3個A,2個B可以組成多少種排列的問題(如:AAABB, AABBA)是《組合數學》的研究領域。但有些情況下,也可以利用計算機計算速度快的特點通過巧妙的推理來解決問題。下列的程序計算了m個A,n個B可以組合成多少個不同排列的問題。
(1) 當有m個A和n個B時,總的排列數爲(m+n)!/m!/n!;
(2) 由於不知道m和n哪個大,故兩個值都減1,最後知道m和n中其中一個爲0;
(3) 當有m-1個A和n-1個B時,總的排列數爲(m+n-2)!/(m-1)!/(n-1)!;
(4)這樣兩個的關係爲:fun(m,n) = fun(m-1,n-1)*(m+n)*(m+n-1)/m/n;
#include<iostream>
using namespace std;
int fun(int m ,int n){
if(m == 0 || n == 0){
return 1;
}
else
return fun(m - 1 , n - 1)*(m + n)*(m+n-1)/m/n;
}
int main(){
cout<<fun(3,2);
return 0;
}