Решить эту проблему с помощью рекурсии:найти все возможные комбинации монет, реализации рекурсии
используя три типа монет включают в себя 1, 2 юаней юаней и 5 юаней, плюс 10 юаней, сколько комбинаций?
Ниже мой код:
int coinNum(int num){
if(num>=0){
if(num==0)
return 1;
else
return coinNum(num-5)+coinNum(num-2)+coinNum(num-1);
}else
return 0;
}
int main(){
int num=coinNum(10);
printf("%d\n",num);//the result is 128
system("pause");
return 0;
}
Что ошибка моего алгоритма рекурсии или то, что ваш правильный код?
вопрос дополнение:
1. (5,2,2,1) и (2,5,2,1) следует учитывать как 1 сочетание.
2. Ниже приведен мой код алгоритма перечисления.
void coin(){
int i,j,k,count=0;
for(i=0;i<=10;i++)
for(j=0;j<=5;j++)
for(k=0;k<=2;k++)
if((i+2*j+5*k)==10){
count++;
printf("one yuan :%d,2 yuan :%d,5 yuan :%d\n",i,j,k);
}
printf("总方法数%d\n",count);//the result is 10
}
Почему вы думаете, что есть ошибка? –
Вы спрашиваете нас, что такое ошибка? Вы должны сообщить нам, что такое ошибка. – bolov
Вы запрашиваете комбинацию, что означает (2,2,5,1) или (2,5,2,1) следует считать одним комбинационным правом? В вашем коде вы не можете обработать этот случай, это ваша логическая ошибка. –