2014-01-30 3 views
2

я в настоящее время быть_наст рекурсивного Однострочник использующего список пониманиеConcatenation ошибки в рекурсивной функции со списком пониманием

def f(n): 
    return 1 if n == 1 else min([2 * f(n - x) + (2 ** x) - 1 for x in range(1, n)]) 

Как вы можете видеть, что это возвращает минимальный Int из списка Интса генерируемого с помощью функций диапазон (1 < = х < п), однако я хотел бы этот список понимание вернуть минимальный кортеже следующим образом:

def f(n): 
    return 1 if n == 1 else min([(2 * f(n - x) + (2 ** x) - 1, x) for x in range(1, n)]) 

так что я могу увидеть, где х значение минимальное значение принадлежит, однако, если я это он ген ставки следующее сообщение об ошибке:

builtins.TypeError: can only concatenate tuple (not "int") to tuple 

И я не могу понять, ни увидеть, где она пытается сцепить в Int, несмотря на мои попытки при отладке и разработке подобных функций (нерекурсивна но они работают). Есть ли у кого-нибудь идеи о том, почему это происходит и как я могу это исправить?

ответ

2

Вы помещаете кортеж в понимание списка, но вы не отрегулировали остальную часть кода для обработки кортежей. В частности, эта часть:

return 1 if n == 1 

не возвращает кортеж, и эта часть:

2 * f(n - x) + (2 ** x) - 1 

пытается сделать математику с возвращаемым значением f, забывая о том, что возвращаемое значение является кортеж вместо числа.

+0

Гоша, конечно, это должно было быть большим недоверием. В любом случае, мне удалось заставить его работать, спасибо! – user3251435

Смежные вопросы