Я пытался быть более многословным и написать свои функции, как это:
def fib2(n):
ret = n and n < 2 or fib2(n-1) + fib2(n-2)
print "fib2({}) = {}".format(n, ret)
return ret
print fib2(4)
def fib3(m):
ret = m if m < 2 else fib3(m-1) + fib3(m-2)
print "fib3({}) = {}".format(m, ret)
return ret
print fib3(4)
Оказывается, что fib2
пытается добавить логические значения номера, и именно поэтому это неверно. fib3
обрабатывает только цифры и является правильным. Но обратите внимание, что это не рекомендуемый способ вычисления чисел Фибоначчи! Если вы попробуете fib3 (1000), он будет работать бесконечно. Лучше начинать с 0 и 1 вверх, а не использовать рекурсию для вычисления чисел Фибоначчи.
я написал короткую функцию, которая вычисляет число Фибоначчи #n для вас:
def fib4(n):
a = 0
b = 1
for i in range(1, n + 1):
a, b = (b, a + b)
return a
print fib4(0)
print fib4(1)
print fib4(2)
print fib4(3)
print fib4(4)
print fib4(1000)
Обратите внимание, что также работает на n==1000
.
Ваша первая функция эквивалентна: '(n и n <2) или fib2 (n-1) + fib2 (n-2)' –
Вы можете попробовать отладку без использования тройного оператора и использовать визуальный отладчик, например : http://www.pythontutor.com/visualize.html#mode=edit –
Ответ: http://stackoverflow.com/a/394887/2301450. Или, может быть, http://stackoverflow.com/a/10314837/2301450 – vaultah