赛派号

洗头膏排名好用 5 طرق كتابة بايثون لتسلسل فيبوناتشي

5 طرق كتابة بايثون لتسلسل فيبوناتشي

تسلسل فيبوناتشي (تسلسل فيبوناتشي) ، المعروف أيضًا باسم تسلسل القسم الذهبي ، بسبب علماء الرياضياتليوناردو فيبوناتشي(ليوناردودا فيبوناتشي) تم تقديمه بأخذ تكاثر الأرانب كمثال ، لذلك يُطلق عليه أيضًا "تسلسل الأرانب" ، والذي يشير إلى تسلسل الأرقام: 1 ، 1 ، 2 ، 3 ، 5 ، 8 ، 13 ، 21 ، 34 ... في الرياضيات أعلاه ، يتم تعريف تسلسل فيبوناتشي بشكل متكرر على النحو التالي: F (1) = 1 ، F (2) = 1 ، F (n) = F (n-1) + F (n-2) (n > = 2 ، n∈N *)

تكمن صعوبة تسلسل فيبوناتشي في الخوارزمية ، وإذا أصبحت مولدًا ، فمن الضروري استخدام حلقة for لاجتياز المولد القابل للتكرار

الطريقة الأولى العودية def fib_recur(n): assert n >= 0, "n > 0" if n 0: a, b = b, a + b max -= 1 yield a for i in fib_loop_while(10): print(i)

تعتبر الدوال ذات العائد بمثابة مولدات ، وهي كائنات قابلة للتكرار ، ولها طريقتان __iter__ و __التالي__ ، والتي يمكن اجتيازها للحصول على العناصر تتطلب Python أن يكون المكرر نفسه قابلاً للتكرار ، لذلك يتعين علينا تنفيذ طريقة __iter__ للمكرر ، ويجب أن تعيد الطريقة __iter__ مكررًا ، وهو بالضبط مكرر واحد ، لذا فإن طريقة __iter__ من المكرر يعيد نفسه

الفئة الرابعة تنفذ أساليب السحر الداخلي class Fibonacci(object): "" "مكرر تسلسل فيبوناتشي" "" def __init__(self, n): """ : param n: int يشير إلى عدد التسلسل الذي تم إنشاؤه """ self.n = n # حفظ بيانات عمود البيانات الذي تم إنشاؤه حاليًا ، وطبيعة المولد ، وموضع التسجيل ، وبيانات الموضع التالي self.current = 0 # اثنان من القيم الأولية self.a = 0 self.b = 1 def __next__(self): "" "عند استخدام استدعاء الوظيفة () التالي ، سيحصل على الرقم التالي" "" if self.current < self.n: self.a, self.b = self.b, self.a + self.b self.current += 1 return self.a else: raise StopIteration def __iter__(self): "" "__iter__ الخاص بالمكرر يمكن أن يعود إلى نفسه" "" return self if __name__ == '__main__': fib = Fibonacci(15) for num in fib: print(num)

يتم تحقيق جوهر الحلقة for عن طريق استدعاء الوظيفة () التالية باستمرار

for x in [1, 2, 3, 4, 5]: pass

أي ما يعادل:

# احصل أولاً على الكائن القابل للتكرار it = iter([1, 2, 3, 4, 5]) # while next while True: try: next(it) except StopIteration: # الخروج من الحلقة عندما تواجه StopIteration break

النوع الخامس من قوة المصفوفة السريعة

import numpy as np ### 1 def fib_matrix(n): for i in range(n): res = pow((np.matrix([[1, 1], [1, 0]], dtype='int64')), i) * np.matrix([[1], [0]]) print(int(res[0][0])) # نقل > fib_matrix(50) ### 2 # استخدم المصفوفة لحساب تسلسل فيبوناتشي def Fibonacci_Matrix_tool(n): Matrix = np.matrix("1 1;1 0", dtype='int64') # العودة هي نوع المصفوفة return np.linalg.matrix_power(Matrix, n) def Fibonacci_Matrix(n): result_list = [] for i in range(0, n): result_list.append(np.array(Fibonacci_Matrix_tool(i))[0][0]) return result_list # نقل > Fibonacci_Matrix(50) ### الأسرى أسرع من الضعف ** ، np.linalg.matrix_power هي أيضًا طريقة

نظرًا لأنه يمكن تسريع الأس بطريقتين ، فإن التعقيد الزمني لطريقة المصفوفة هو O (log n) استخدم حزمة الحوسبة العلمية numpy لتنفيذ طريقة المصفوفة O (log n)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lsinopec@gmail.com举报,一经查实,本站将立刻删除。

上一篇 没有了

下一篇没有了