تسلسل فيبوناتشي (تسلسل فيبوناتشي) ، المعروف أيضًا باسم تسلسل القسم الذهبي ، بسبب علماء الرياضياتليوناردو فيبوناتشي(ليوناردودا فيبوناتشي) تم تقديمه بأخذ تكاثر الأرانب كمثال ، لذلك يُطلق عليه أيضًا "تسلسل الأرانب" ، والذي يشير إلى تسلسل الأرقام: 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النوع الخامس من قوة المصفوفة السريعة
نظرًا لأنه يمكن تسريع الأس بطريقتين ، فإن التعقيد الزمني لطريقة المصفوفة هو O (log n) استخدم حزمة الحوسبة العلمية numpy لتنفيذ طريقة المصفوفة O (log n)