Форум сайта python.su
0
Пытаясь забороть рекурсию, стал решать задачки и столкнулся с неожиданной проблемой:
Не получается вытащить значение из программы.
n = 15
def f(x):
if x == 1:
return x
elif x > 0:
f(x - 5)
f(x - 3)
print( f(n) )
На выходе получаю None
Как так?
Если что, условие звучит так:
Определить можно ли с использованием только операций «прибавить 3» и «прибавить 5» получить из числа 1 число N (N - натуральное, не превышает 106). Разумеется, само число 1 получить можно, просто не применяя никаких операций.
Офлайн
857
9_AndrПотому что у тебя там пропущен return.
На выходе получаю None
>>> def f(): ... if False: ... return 1 ... >>> print(f()) None >>>
>>> def f(): ... if False: ... return 1 ... return 2 ... >>> print(f()) 2 >>>
Офлайн
0
py.user.nextНо если я напишу return вне условия я, очевидно, не смогу проверить на это условие x
Офлайн
27
9_AndrЕсли return до условия, то Ваше утверждение справедливо. Если return расположен после условия или целого каскада условий, тогда Ваше утверждение неправильно. В этом случае на return вне условия попадём только, если условие не будет выполнено где-нибудь в условии. Ведь выполнение условия выдаст return внутри условия и прощай оставшаяся часть кода, расположенная дальше этого условия.
Но если я напишу return вне условия я, очевидно, не смогу проверить на это условие x
Офлайн
0
Как ни пытался менять местами return, ничего не вышло. Узнал про global и все запустилось
n = int(input())
t = ‘NO’
def f(x):
if x == 1:
global t
t = ‘YES’
elif x > 0:
f(x - 5)
f(x - 3)
if n < 20:
f(n)
print(t)
else:
print('YES')
Офлайн
0
Табуляция пропадает
Прикреплённый файлы:
РЕ КУР СИ Я.py (223 байта)
Офлайн
27
9_AndrПомещай код в тэг. Для этого в форме сообщения, рядом со смайликом имеется голубой значок <> на фоне листа бумаги. Попробуй навести на него мышку и выбрать из списка Python. Создастся тэг, внутрь которого можно поместить твой питоновский код. Форматирование никуда не будет деваться.
Табуляция пропадает
Офлайн