Рекурсивно определить, мржно ли заданную сумму денег разменять монетами по 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д