피보나치 수열은 앞의 두 수를 더하여 다음 수를 생성하는 수열로서 다음과 같이 코드를 작성할 수 있습니다.
위 프로그램의 n은 수열의 갯수로서 정수입니다. 이것은 range() 함수의 인수이기 때문입니다. 정수형은 자릿수등의 한계가 존재하므로 얼마 이상의 값에서는 예기치 못한 값을 반환합니다.
그러므로 피보나치 수열을 생성할 경우 원소의 갯수가 아닌 그 합을 기준으로 하여 프로그램을 수정할 수 있습니다. 수정된 프로그램 역시 자료형의 크기에 한계가 있으므로 첫번째 프로그램보다 약간 개선된 결과를 보이지만 한계가 존재합니다.
피보나치 수열의 홀수 항들의 합은 다음과 같이 계산할 수 있습니다.
def fiboS(n):
#n=피보나치 수열의 갯수
fiboseq=np.array([1, 2])
for i in range(2, n+1):
fiboseq=np.append(fiboseq, fiboseq[i-2]+fiboseq[i-1])
return(fiboseq)
fiboS(10)
array([ 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144])
위 결과는 numpy array로서 이들의 합을 위해서는 np객체.sum()을 적용합니다.
fiboS(10).sum()
375
#n=피보나치 수열의 갯수
fiboseq=np.array([1, 2])
for i in range(2, n+1):
fiboseq=np.append(fiboseq, fiboseq[i-2]+fiboseq[i-1])
return(fiboseq)
fiboS(10)
array([ 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144])
위 결과는 numpy array로서 이들의 합을 위해서는 np객체.sum()을 적용합니다.
fiboS(10).sum()
375
위 프로그램의 n은 수열의 갯수로서 정수입니다. 이것은 range() 함수의 인수이기 때문입니다. 정수형은 자릿수등의 한계가 존재하므로 얼마 이상의 값에서는 예기치 못한 값을 반환합니다.
fiboS(50)
array([ 1, 2, 3, 5, 8,
13, 21, 34, 55, 89,
...
267914296, 433494437, 701408733, 1134903170, 1836311903,
-1323752223, 512559680, -811192543, -298632863, -1109825406,
-1408458269])
array([ 1, 2, 3, 5, 8,
13, 21, 34, 55, 89,
...
267914296, 433494437, 701408733, 1134903170, 1836311903,
-1323752223, 512559680, -811192543, -298632863, -1109825406,
-1408458269])
그러므로 피보나치 수열을 생성할 경우 원소의 갯수가 아닌 그 합을 기준으로 하여 프로그램을 수정할 수 있습니다. 수정된 프로그램 역시 자료형의 크기에 한계가 있으므로 첫번째 프로그램보다 약간 개선된 결과를 보이지만 한계가 존재합니다.
def fiboS(n):
#n=피보나치 수열의 갯수
fiboseq=np.array([1, 2])
while fiboseq.sum()<=n:
fiboseq=np.append(fiboseq, fiboseq[-2]+fiboseq[-1])
return(fiboseq)
fiboS(400000000.0)
array([ 1, 2, 3, 5, 8, 13,
21, 34, 55, 89, 144, 233,
377, 610, 987, 1597, 2584, 4181,
6765, 10946, 17711, 28657, 46368, 75025,
121393, 196418, 317811, 514229, 832040, 1346269,
2178309, 3524578, 5702887, 9227465, 14930352, 24157817,
39088169, 63245986, 102334155, 165580141])
#n=피보나치 수열의 갯수
fiboseq=np.array([1, 2])
while fiboseq.sum()<=n:
fiboseq=np.append(fiboseq, fiboseq[-2]+fiboseq[-1])
return(fiboseq)
fiboS(400000000.0)
array([ 1, 2, 3, 5, 8, 13,
21, 34, 55, 89, 144, 233,
377, 610, 987, 1597, 2584, 4181,
6765, 10946, 17711, 28657, 46368, 75025,
121393, 196418, 317811, 514229, 832040, 1346269,
2178309, 3524578, 5702887, 9227465, 14930352, 24157817,
39088169, 63245986, 102334155, 165580141])
피보나치 수열의 홀수 항들의 합은 다음과 같이 계산할 수 있습니다.
re=fiboS(10000)
re1=[re[i] for i in range(len(re)) if i%2 !=0]
re1, sum(re1)
([2, 5, 13, 34, 89, 233, 610, 1597, 4181], 6764)
re1=[re[i] for i in range(len(re)) if i%2 !=0]
re1, sum(re1)
([2, 5, 13, 34, 89, 233, 610, 1597, 4181], 6764)
댓글
댓글 쓰기