2016-07-04 5 views
-1

이 프로그램은 입력 n = 0을 제외하고 올바른 출력을 보여준다.파이썬에서 피보나치 시퀀스 프로그램은 입력 0을 제외하고는 잘 작동 함

def fib(n): 
    f=list() 
    i=0 
    while(i<=n): 
     f.append(i) 
     i+=1 
    f[0]=0 
    f[1]=1 
    for i in range(2,n+1): 
     f[i]=f[i-1]+f[i-2] 
     i+=1 
    return f[n] 
n=int(input()) 
print(fib(n)) 

i는 입력 N = 0, 그것은 다음과 같은 오류를 보여주고 때 중간

Traceback (most recent call last): 
    File "fib.py", line 16, in <module> 
     print(fib(n)) 
    File "fib.py", line 10, in fib 
     f[1]=1 
    IndexError: list assignment index out of range 
+0

N = 0을 사용하여 모든 X 피보나치 값으로 당신은 F의 위치 1에 값이없는 있지만 문장은 _f 그 위치에 테 값을 읽으려고 [1] = 1_. 아마도 당신은 사전과 혼동을 느꼈을 것입니다. BTW, 파이썬 코드에서 PEP8을 따르십시오. – Hamlett

답변

1

두 줄 인해는 while 루프 동안 이러한 요소들을 초기화 할 필요가 없다. 그리고 오류는 사실 n=0의 경우 목록에 하나의 elemnt 만 추가한다는 오류가 있습니다. 그리고 그 첫 번째와 두 번째 요소의 변화하는 가치. 두 번째 요소는 없습니다.

def fib(n): 
    f=[] 
    i=0 
    while(i<=n): 
     f.append(i) 
     i+=1 
    for i in range(2,n+1): 
     f[i]=f[i-1]+f[i-2] 
     i+=1 
    return f[n] 
n=int(input()) 
print(fib(n)) 
+1

@Destrif 전혀! 왜 그렇게 생각하니? (이것도 시험해 보았습니다.) –

+0

@Destrif 오 미안하지만 분명히 당신을 오해했습니다. –

0

어느 오리 유형을 :

def fib(n): 
    if n in [0, 1]: 
     return n 
    . 
    . 

또는 각각 f.append(0)f.append(1)-f[0] = 0f[1] = 1을 변경합니다.

0

이 두 줄은 필요하지 않습니다.

f[0]=0 
f[1]=1 

제거하면 모든 것이 작동합니다. 코드에

0

수정 :

def fib(n): 
    f=list() 
    i=0 
    while(i<=n): 
     f.append(i) 
     i+=1 
    # HERE WAS THE MISTAKE 
    f.append(0) 
    f.append(1) 
    for i in range(2,n+1): 
     f[i]=f[i-1]+f[i-2] 
     i+=1 
    return f[n] 

출력 :

>>> fib(0) 
0 
>>> fib(1) 
1 
>>> fib(2) 
1 
>>> fib(3) 
2 
>>> fib(4) 
3 
>>> fib(5) 
5 
>>> fib(6) 
8 
>>> fib(7) 
13 
>>> fib(8) 
21 
>>> fib(9) 
34 
... 
>>> fib(30) 
832040 
0
코드의 문제는 루프 후 수 있었다 있도록 루프, 항목 1 색인을 작성하지 않은 것이 었습니다

존재하지 않았기 때문에이 항목을 변경하십시오. 내가 제안 후 피보나치 기능을

def fib(n): 
    if 0<=n<2: return n 
    else: return fib(n-2)+fib(n-1) 

를 정의하는 재귀를 사용하여, 처음에 0과 1을 "하드 코드"다음 단 i 번째 항목을 얻을 수

fib(i) 

전화를 걸거나 목록을 만들 것 지능형리스트

[fib(i) for i in range(x)]