Форум сайта python.su
0
Python 2.7.2
def rec(N,f1,f2): f=f1+f2 if N>0: N=N-1 f1=f2 f2=f rec(N,f1,f2) else: print f2 return f2 n=input('Введите n: ') if n<=2: print 'n должно быть строго больше 2' else: n=n-2 F1=1 F2=1 x=rec(n,F1,F2) print x
else: print f2 return f2
Отредактировано Lerby (Дек. 6, 2012 22:37:55)
Офлайн
63
На додумывание…
def rec(N,f1,f2): f=f1+f2 if N>0: N=N-1 f1=f2 f2=f rec(N,f1,f2) return f2 #!!!!!!!!!!!!!!!!!!!! else: print f2 return f2 n=input(u'Введите n: ') if n<=2: print u'n должно быть строго больше 2' else: n=n-2 F1=1 F2=1 x=rec(n,F1,F2) print x
Отредактировано 4kpt (Дек. 6, 2012 23:02:32)
Офлайн
0
4kptСчитается правильно
P.S. Считает, кстати, тоже неправильно. Результат - левачек.

4kptДаже если вместо
Обратите внимание на результат, который возвращается. Подумайте, что такое переменная в Pyton и на что она ссылается…
x=rec(n,F1,F2) print x
print rec(n,F1,F2)
Отредактировано Lerby (Дек. 6, 2012 23:21:27)
Офлайн
def rec(N,f1,f2): ... if N > 0: ... # rec(N, f1, f2) # неверно, rec возвратит None ; return rec(N, f1, f2) # верно.
Отредактировано dimy44 (Дек. 7, 2012 00:15:30)
Офлайн
63
Lerby
Вы правы. Не туда глянул…
Но Вы меня не поняли. Что такое переменная. Фактически это ссылка на объект.
На что ссылается х? На один объект функции, который возвращает… А ничего он не возвращает, так как это только первый шаг, в котором нет return. Я Вам это и указал.
Либо вводите дополнительную глобальную переменную, в которую сбрасывайте значение (все мое естество против этого). Либо разработайте класс и переменную для хранения временного значения необходимо сформировать как атрибут класса. Либо делайте, как указал dimy44. Его предложение самое надежное и понятное.
Отредактировано 4kpt (Дек. 7, 2012 10:38:16)
Офлайн