Fibonacci sequence
2450 단어 fibonacci
################################################################################
#Question: #
#Each new term in the Fibonacci sequence is generated by adding #
#the previous two terms. By starting with 1 and 2, the first 10 terms will be: #
# #
# 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... #
# #
#By considering the terms in the Fibonacci sequence whose values do not exceed #
#four million, find the sum of the even-valued terms #
#By IT05 2012-08-14
################################################################################
#one
s = [1,2]
while s[-1]<=4000000:
s.append(s[-1]+s[-2])
print(sum([i for i in s if i%2==0]))
#two
b = [3,5]
s = [2]
while s[-1]<=4000000:
s.append(sum(b))
b = [b[1]+s[-1],b[1]+s[-1]+s[-1]]
s.pop()
print(sum(s))
for i in s:
if i%2==1:
s.remove(i)
print('remove:'+str(i))
처음에는 결과에 맞지 않는 수를 차버리고 싶었지만,
그래서 이 코드를 사용해서 직접 실행하려고 합니다.
print(sum(s))
필요한 결과를 얻을 수 있지만 문제가 생겼다.(먼저 토론하지 않으면 이런 방법은 힘들어서 비위를 맞추지 못한다)
remove () 과정에서 s원조가 바뀌기 때문에 for가 열리면
처음에는 원조s가 변하지 않는다고 가정하였는데, 이것은 유사한 색인을 통해 원조를 읽는 것이다. 비록 이것은 내가
자료를 찾지 못했지만 테스트에서 다음과 같은 규칙이 있습니다.
s = [1,2]
while s[-1]<=4000000:
s.append(s[-1]+s[-2])
print(s)
# 1
for i in s:
if i%2==1:
s.remove(i)
print(s)
# 2
for i in s:
if i%2==1:
s.remove(i)
print(s)
마지막 결과는 다음과 같습니다.
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987,...]
[2, 5, 8, 21, 34, 89, 144, 377, 610, 1597, 2584, 6765, 10946,...]
[2, 8, 34, 144, 610, 2584, 10946, 46368, 196418, 832040, 3524578]
위의 세 줄이 각각 A, B, C 줄로 명명되었다고 가정하다
그러면 순환 1이 실행될 때 첫 번째 순환에서 1%가 2가 1이 아니라는 것을 발견하고 1을 차버리면 s=[2,3,...]
즉 s[0]=2, 두 번째 순환을 실행할 때 실행 인덱스 1, 즉 이때 i=s[1]에 해당하며 s가 변하지 않으면
좋아요, s[1]는 2예요, 그런데 지금은 3이 됐어요. 그래서 이때 s[1]를 차버릴 거예요. 그래서 s=[2,5,8,...]
세 번째 순환을 실행할 때, 인덱스 2, 즉 i=s[2]에 해당하며, s[2]=8,s 때문에 처리하지 않지만, 우리는
고개를 돌리니 그 5가 몰래 앞으로 달려가 순환이 끝난 뒤 5가 빠졌어요.
나중에 돌이켜 생각해 보니 사실 이렇게 할 필요가 없다. 직접 요구에 부합되는 것을 제기하면 된다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
캐시 계산을 이용하여 Fibonacci 함수 계산 속도를 높이다추가 매개 변수 memo[n]=result를 추가하여 중간 값을 기록합니다. 계산할 때 우선if(typeof result!="number")를 통해 memo[n]가 존재하는지 검사합니다.이렇게 하면 계산의 효율을 높...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.