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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы