2017-05-23 4 views
1

파이썬에서리스트를 사용하여 fibonacci 시리즈를 인쇄하려고합니다. 이 내 코드입니다피보나치 시리즈 목록 사용?

f=[1,1] 
for i in range(8): 
    f.append(f[i-1]+f[i-2]) 

print(f) 

출력은

[1, 1, 2, 3, 2, 3, 5, 5, 5, 8] 

내가 버그를 여기에 도착하고 있지 않다입니다!

+0

은 무엇'i''f''F와 같은 일부 디버그 출력 추가 고려 [I-1] '와'F [I- 2]'는 각 단계에 있습니다. – bereal

+0

'i = 2' 일 때 무슨 일이 일어날 지 생각해 보라 - 이미 목록에 두 번 덧붙여졌지만 다음에 추가하는 값은'f [0] + f [1]' – asongtoruin

+0

이다. . 목록에서 인덱스 2로 시작하기 때문에 루프를 시작해야합니다. 즉, 'range (2, 8)' –

답변

3

파이썬의 range은 0에서 시작합니다. 요소 2를 생성해야합니다. 0에서 시작하면 처음 두 번 계산에 대한 음수 인덱스를 얻습니다.이 인덱스는 목록의 끝에서 액세스합니다. 이 문제를 해결하려면 루프를 for i in range(2, 8)으로 변경하십시오. 그 시점에서

f[2] = f[0-1] + f[0-2] = f[-1] + f[-2] (= f[1] + f[0]) = 1 + 1 = 2 # looking good 
f[3] = f[1-1] + f[1-2] = f[0] + f[-1] (= f[0] + f[2]) = 1 + 2 = 3 # looking good 
f[4] = f[2-1] + f[2-2] = f[1] + f[0] = 1 + 1 = 2     # oops! 
f[5] = f[3-1] + f[3-2] = f[2] + f[1] = 2 + 1 = 3 

:

은 제로에 range를 시작하고 다음과 같은 용어를 요약하고 목록에 추가되면서 결국 부정적인 색인을 사용하여 혼란의 원천이 될 것으로 보인다 무엇인지 명확히하기 위해 숫자에 트랙 있지만 2.

+0

인덱스 오류가 발생하지 않는 이유는 -1과 -2는 목록의 끝에서 시작하는 첫 번째와 두 번째 값을 제공합니다. – Green

+0

Green 좋은 전화, 고마워. – pjs

+2

@Green이고, 그래서 그는 실제로 범위 제한에 관계없이'f.append (f [-1] + f [-2]) '로 실제로 잘되어야합니다. – bereal

1
f=[1,1] 

for i in range(8): 
    f.append(f[i]+f[i+1]) 

print(f) 

RESULT하여 적절한 인덱스 오프셋

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55] 
+0

@Chaitanya Patil >> f.append (f [i-1] + f [i-2]) << f [i-2] -> f [i + 1] –

0

명시 적으로 시작점을 지정하지 않으면 range 함수가 0에서 시작한다는 점에 유의해야합니다. 귀하의 경우 : for i in range(2, 8)이어야합니다.

는 출력 :이 이상한 결과를 가지고 왜

또한
[1, 1, 2, 3, 5, 8, 13, 21] 

, 파이썬, 대신 왼쪽의 오른쪽에서 계산하는 배열에 부정적인 인덱스를 사용할 수 있습니다,이입니다. -1의 인덱스 등등 당신이 목록의 마지막 요소를 제공하고 어디 i = 0, 당신은 f[-1]f[-2]을 추가하는 경우 : PJS '대답에 추가

+0

변경했습니다 :-) 그것을 얻었다 –

0

.

다른 해결책이 이미 지적되었으므로 range()의 올바른 시작점을 설정해야합니다.

1
f=[1,1] 
for i in range(8): 
    s=len(f) 
    f.append(f[s-1]+f[s-2]) #sum of last two elements 

print(f) 

마지막 요소 두 개에 대한 인덱스로 -1과 -2를 사용하십시오.

0

스크립트

f=[1,1] 

for i in range(2,8): 
    print(i) 
    f.append(f[i-1]+f[i-2]) 
    print(f) 

출력

2 
[1, 1, 2] 
3 
[1, 1, 2, 3] 
4 
[1, 1, 2, 3, 5] 
5 
[1, 1, 2, 3, 5, 8] 
6 
[1, 1, 2, 3, 5, 8, 13] 
7 
[1, 1, 2, 3, 5, 8, 13, 21] 

문제는 0에서 시작 i, f[-1], f[-2] 0을 반환 2의 범위를 사용하여 시작 및도 8은 제 8 피보나치 수를 나타내고있다.

디버그 잉크를 제거

스크립트

f=[1,1] 

for i in range(2,8): 
    f.append(f[i-1]+f[i-2]) 
print(f) 
+0

고마워! 알았다 :-) –