Python計算斐波那契數列

2021-07-02 18:46:52 字數 3001 閱讀 4673

華電北風吹

天津大學認知計算與應用重點實驗室

日期:2015/5

利用python計算第乙個達到一百萬位數的斐波那契數列各位數之和 結果為4501552

以下是我用到的**,不是中間需要一些人工操作來加快收斂性,有興趣讀者可以寫**加快收斂

首先執行這個,可以大致確定一百萬個數所在斐波那契序列的位置

i=1

j=1k=i+j

count=3

while count<4850000:

i=jj=k

k=i+j

count+=1

result=str(k)

print('k長度')

k_len=len(result)

print(k_len)

sum=0

for item in range(0,len(result)):

sum+=int(result[item])

print('k各位數之和')

print(sum)

file_object = open('python.txt','w')

list=[str(i)+'\n',str(j)+'\n',str(k)+'\n',str(k_len)+'\n']

file_object.writelines(list)

file_object.close()

接下來就是根據上一步的結果,確定向前還是向後

向前的**為

input = open('python.txt')

i=input.readline()

i=i.strip('\n')

i=int(i)

j=input.readline()

j=j.strip('\n')

j=int(j)

k=input.readline()

k=k.strip('\n')

k=int(k)

print('read data end')

input.close()

count=0

while count<4000:

i=jj=k

k=i+j

count+=1

result=str(k)

print('k長度')

k_len=len(result)

print(k_len)

file_object = open('python.txt','w')

list=[str(i)+'\n',str(j)+'\n',str(k)+'\n',str(k_len)+'\n']

file_object.writelines(list)

file_object.close()

print('iterator up結束')

向後的**為
input = open('python.txt')

i=input.readline()

i=i.strip('\n')

i=int(i)

j=input.readline()

j=j.strip('\n')

j=int(j)

k=input.readline()

k=k.strip('\n')

k=int(k)

print('read data end')

input.close()

count=0

while count<10:

k=jj=i

i=k-j

count+=1

result=str(k)

print('k長度')

k_len=len(result)

print(k_len)

file_object = open('python.txt','w')

list=[str(i)+'\n',str(j)+'\n',str(k)+'\n',str(k_len)+'\n']

file_object.writelines(list)

file_object.close()

print('iterator down結束')

為了檢視結果的方便還有乙個檢視txt內容的**
input = open('python.txt')

i=input.readline()

i=i.strip('\n')

print('i的長度')

print(len(i))

j=input.readline()

j=j.strip('\n')

print('j的長度')

print(len(j))

k=input.readline()

k=k.strip('\n')

print('k的長度')

print(len(k))

k_len=input.readline()

k_len=k_len.strip('\n')

k_len=int(k_len)

print('資料k長度')

print(k_len)

result=j

sum=0

for item in range(0,len(result)):

sum+=int(result[item])

print('各位數之和')

print(sum)

實驗過程遇到的問題

本問題的關鍵是如果你每次k更新後都判斷k的位數的話,程式會變得特別卡,然而如果僅僅是執行更新k的操作的話程式是執行效率很高的,因此需要減少k位數的計算。然後遇到的問題就是確定第一百萬位斐波那契數列出現的位置,採用二分法的思想。根據每一步的反饋的k的位數,直至找到滿足要求的k.

本實驗還有乙個問題就是,因為i,j,k都是位數比較大,所以到最後讀寫txt就變成影響效率的主要因素。由於對python還不是特別了解,不知道能不能像matlab那樣,將這些資料不放txt,而放在記憶體中,可以被直接呼叫的話,程式的效率將會提高的更快。

python計算斐波那契數列

斐波那契數列就是 分割數列 第一項加第二項等於第三項,以此類推 第二項加第三項等於第四項 如下 這一段 實現fib n 函式返回第n項,printfn m,n,i 函式實現輸出第i項斐波那契數列,輸出在m到n之間的斐波那契數的數量 def fib n x 0 x1 1 x2 1 i 2 while ...

斐波那契數列 斐波那契數列python實現

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...

python 斐波那契數列

用python寫斐波那契數列當然大家都寫的出來。當時如果用一行 寫呢。本來沒有打算用一行 寫的。後來看到有用一行 寫階乘的。reduce lambda x,y x y,i for i in range 1,n 1 當然在這之前需要 from functools import 好吧,如果你願意,就算兩...