Python — О последовательности Фибоначчи

#python #sequence #fibonacci

#питон #последовательность #фибоначчи

Вопрос:

Я пытаюсь создать код, который просит пользователя ввести положительное число, а затем сообщает ему/ей, принадлежит ли это число последовательности Фибоначчи. Проблема в том, что, когда я запускаю код, он никогда не прекращается (или в конечном итоге я получу ошибку). Вот мой код до сих пор:

 print("nEnter any positive number, to see if it") user = input("belongs to the Fibonacci sequence: ")  def fibo(user):  if user in [0,1]:  return user  else:  return fibo(user-1)   fibo(user-2)   while user.isdigit() == False:  user = input("Input error. Please enter a positive number: ") else:  user = int(user)  if user == fibo(user):  print("nNumber",user,"belongs to the Fibonacci sequence.n") else:  print("nNumber",user,"doesn't belong to the Fibonacci sequence.n")  

Комментарии:

1. Вместо того, чтобы пытаться вычислить последовательность рекурсивно, просто вычисляйте ее вперед, пока не достигнете числа, которое больше или равно «пользователь».

2. Я понимаю, о чем вы говорите, но я не совсем уверен, как это сделать… Я имею в виду, конечно, я собираюсь стереть функцию def fibo(пользователь), но тогда куда я собираюсь поместить [0,1] и fibo(пользователь-1) fibo(пользователь-2)…? Внутри оператора if?

Ответ №1:

 def fibo(input):  i = int(input)  # set z to 1 if you want  # False to be returned for 0  x = 0; y = 1; z = 0  while z lt; i:  z = x   y; x = y; y = z  return z == i   print(fibo(input("fibonacci?: ")))  

Ответ №2:

 def fibo(input):  if int(input) == 0: return [0]  x = 0; y = 1; z = 0; erg = []  while True:  z = x   z; x = y; y = z  if y gt; int(input): break  else: erg.append(y)  if int(input) in erg: return True  else: return False   print(fibo(input("fibonacci?: ")))  

Комментарии:

1. Здравствуйте и спасибо за ответ! Я новичок в python, поэтому, пожалуйста, не могли бы вы объяснить немного больше о x, y, z, erg= [],. append() и почему мы помещаем fibo() внутри printf…? Я немного сбит с толку, если честно :D!

2. Если код не выполняется в интерактивном режиме, возвращаемое значение функции не будет видно, если оно явно print() не изменено. Я не вижу смысла в этом списке для вашей конкретной цели. Также, похоже, есть какая-то опечатка. Смотрите мой ответ, адаптированный из вышесказанного.

3. @TomYan прав, список не является необходимым. у меня это есть, потому что я использовал свой сценарий, который я сделал, чтобы дать мне все числа Фибоначчи вплоть до введенного числа в качестве основы для этого. я не нашел опечатки, тхо. все равно спасибо, что указали на это.

4. Ах, похоже, это был трюк, чтобы включить f0 и f1 в список

5. Спасибо за ответы, ребята, я вам очень признателен! И теперь я понял код!