Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 2, 2015 21:55:30

ruthven
Зарегистрирован: 2015-05-20
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсивная функция и глобальная переменная

Добрый день. Имеется такая задача - В Англии валютой являются фунты стерлингов £ и пенсы p, и в обращении есть восемь монет: 1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) и £2 (200p). £2 возможно составить следующим образом: 1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p
Сколькими разными способами можно составить £2, используя любое количество монет?

Задачу я решил и условие привел только чтобы было понятно, что делает программа. pences - кортеж возможных монет, total (глобальная переменная) - число разных способов составления £2. Функция count (рекурсивная) - подсчитывает значение total, в неё передаётся value - значение из pences, т.е. та монета из которой составляем £2, и part - число пенсов (т.е., к примеру, 100 + 50 + 20) Вопрос в следующем, почему если сразу написать total += count(value, part) (в программе закомментировано), то программа выдает неправильный ответ, а если ввести дополнительную переменную:
temp = count(value, part)
total += temp
то ответ верный?

pences = (200, 100, 50, 20, 10, 5, 2, 1)
total = 0
def count(value, part):
    global total
    for i in range(0, 201, pences[value]):
        if part + i < 200 and value < 7:
            temp = count(value + 1, part + i)
            total += temp
            #total += count(value + 1, part + i)
        elif part + i == 200 or value == 7:
            return 1
        else:
            return 0
temp = count(0, 0)
total += temp
#total += count(0, 0)
print('Ответ:', total)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version