2015-01-24 2 views
-2

특정 범위의 모든 피보나치 숫자 목록을 반환하는 파이썬 함수를 작성하려고하지만 코드는 [0]을 반환 할뿐입니다. 문제가 무엇입니까?파이썬을 사용하여 특정 범위의 피보나치 숫자 찾기

from math import sqrt 
def F(n): 
    return int(((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5))) 


def Frange(x): 
    A = [0] 
    while max(A) < x: 
     H = 1 
     for i in range(H): 
      A.append(F(i)) 
     H = H+1 
    return A 
+0

어떤 방식으로 오류가 발생했는지, 즉 오류나 잘못된 결과가 무엇인지 설명하십시오. –

+0

@ PeterHerdenborg 나는 그 제안을 했나요? – phighter

답변

1

당신은 당신의 while 루프에서 첫 번째 문으로 H = 1을 설정; 그래서 때마다 당신은 H = 1for 루프를 입력하고 당신은 단지 당신은 while 루프 외부 H = 1을 설정해야 n=0

의 피보나치 수를 얻을 것이다 : 당신은 아주 쉽게 스스로 해결할 수 있었다

def Frange(x): 
    A = [0] 
    H = 1 
    while max(A) < x: 

     for i in range(H): 
      A.append(F(i)) 
     H = H+1 
    return A 

print H과 같이 루프 내부에 다양한 값을 인쇄합니다.

+0

정말 고맙습니다. 프로그래밍에 익숙하지 않은 이유는 무엇입니까? – phighter

0

나는 또 다른 오류를 발견하고 개선 된 코드는 다음과 같습니다

from math import sqrt 
    def F(n): 
     return int(((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5))) 

    def Frange2(x): 
     A = [0] 
     H = 1 
     while max(A) < x: 
      if F(H) < x: 
       A.append(F(H)) 
      else: 
       break 
      H = H+1 
     return A 
+0

좋습니다.하지만 Evert의 대답을 받아 들여야합니다. – Smandoli

+0

@Smandoli 무엇을 의미합니까 수락 – phighter

+0

각 답변 옆에 "동의"버튼이 있습니다. 질문에 답이 나면 클릭하면 도움이 된 것입니다. – Smandoli

0

범위에서 피보나치 번호 목록을 계산하는 가장 빠르고 가장 인기있는 단순한 솔루션

def fib3(n): #FASTEST YET 
    fibs= [0,1] #list from bottom up 
    for i in range(2, n+1): 
     fibs.append(fibs[-1]+fibs[-2]) 
    return fibs 

이 기능은 매장입니다 계산 된 피보나치 수는리스트에 저장되고 나중에 계산을 위해 '캐시 된'숫자로 사용됩니다.

희망이 있습니다.

관련 문제