嘿我有一個問題,我需要創建兩個函數,countWithPerms()和ignorePerms()這兩個函數必須是遞歸解決方案。 countWithPerms()會計算實際排列的數量,而ignorePerms()只會計算重複排列的數量。所以如果我將3傳入函數countWithPerms()會發現3 =(2 + 1)=(1 + 2)=(1 + 1 + 2) 1),因此countWithPerms(3)爲3,因爲它計數3種方式來總結3.由於(1 + 2)和(2 + 1),countIgnorePerms(3)爲2,因此它們都不會計入countWithPerms中是正好寫在相反的順序。排列的遞歸解決方案
大量例子是countWithPerms(7)是63,而countIgnorePerms(7)爲14
我已經做countwithPerms,但我完全被卡住的countIgnorePerms。
int countWithPerms(int n)
{
if(n == 1)
return 0;
else
n--;
return (countWithPerms(n) + 1) +
(countWithPerms(n));
}
int ignorePerms(int sum, int xmin){
if(sum == 1)
return 0;
else
for(int i=0; i<sum;i++){
sum += sum-xmin;
2*ignorePerms(sum,xmin)+1;
return sum;
}
}
你正在計數分區,而不是排列。 – aschepler
ignorePerms()被稱爲[整數分區](http://en.wikipedia.org/wiki/Partition_(number_theory))和countWithPerms()被稱爲[整數組成](http://en.wikipedia.org/維基/ Composition_(number_theory))。 – Ante
我想你是在排列的地方計算操作。 – Shravan40