파이썬에서리스트를 사용하여 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]
내가 버그를 여기에 도착하고 있지 않다입니다!
파이썬에서리스트를 사용하여 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]
내가 버그를 여기에 도착하고 있지 않다입니다!
파이썬의 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.
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]
@Chaitanya Patil >> f.append (f [i-1] + f [i-2]) << f [i-2] -> f [i + 1] –
명시 적으로 시작점을 지정하지 않으면 range
함수가 0에서 시작한다는 점에 유의해야합니다. 귀하의 경우 : for i in range(2, 8)
이어야합니다.
는 출력 :이 이상한 결과를 가지고 왜
또한[1, 1, 2, 3, 5, 8, 13, 21]
, 파이썬, 대신 왼쪽의 오른쪽에서 계산하는 배열에 부정적인 인덱스를 사용할 수 있습니다,이입니다. -1
의 인덱스 등등 당신이 목록의 마지막 요소를 제공하고 어디 i = 0
, 당신은 f[-1]
및 f[-2]
을 추가하는 경우 : PJS '대답에 추가
변경했습니다 :-) 그것을 얻었다 –
.
다른 해결책이 이미 지적되었으므로 range()
의 올바른 시작점을 설정해야합니다.
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를 사용하십시오.
스크립트
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)
고마워! 알았다 :-) –
은 무엇'i''f''F와 같은 일부 디버그 출력 추가 고려 [I-1] '와'F [I- 2]'는 각 단계에 있습니다. – bereal
'i = 2' 일 때 무슨 일이 일어날 지 생각해 보라 - 이미 목록에 두 번 덧붙여졌지만 다음에 추가하는 값은'f [0] + f [1]' – asongtoruin
이다. . 목록에서 인덱스 2로 시작하기 때문에 루프를 시작해야합니다. 즉, 'range (2, 8)' –