Рекурсивно определить, мржно ли заданную сумму денег разменять монетами по 3, 10, 15 копеек - C (СИ)
Формулировка задачи:
Добрый день.
Подскажите, пожалуйста, где ошибка в решении следующей задачи: написать программу, которая рекурсивно позволяет определить, можно ли заданную сумму разменять монетами по 3, 10, 15 копеек.
Программа выдаёт результат только для суммы, равной 30. Сама я думаю, что ошибка во второй части программы, в месте вызова функции (номер строки 32).
Код следующий:
Использование рекурсии вызывает у меня трудности, я никак не могу её понять, хотя решаю уже не первую задачу. Я буду очень благодарна, если кто-нибудь посоветует мне какие-нибудь источники, где на примитивном уровне для совсем начинающих программистов будет изложена рекурсия.
Заранее большое спасибо!
bool divide(int sum, int money[])
{
if (sum == 0)
{
return true;
}
else
{
for (int i = 0; i < sizeof(money); i++)
{
int tempsum = sum - money[i];
if(divide(tempsum, money))
{
return true;
}
}
}
return false;
}
void _tmain(int argc, _TCHAR* argv[])
{
int const size = 3;
int A[size] = {3, 10, 15};
int sum;
printf("Enter summa:\n");
scanf("%i", &sum);
if(divide(sum,A))
{
printf("Yes");
}
else
{
printf("No");
}
printf("\n");
}Решение задачи: «Рекурсивно определить, мржно ли заданную сумму денег разменять монетами по 3, 10, 15 копеек»
textual
Листинг программы
#include "iostream.h"
int Chk(int n)
{
if (n < 0) return 0;
if ((n == 3) || (n == 10) || (n == 15)) return 1;
return Chk(n-3) || Chk(n-10) || Chk(n-15);
}
int main(int argc, char* argv[])
{
int k;
while (1)
{
cout << "Enter sum (0 - end) ";
cin >> k;
if (k == 0) break;
if (Chk(k))
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}