บทเรียนที่ 5

فهم وجهات النظر المتكررة باستخدام فيبوناتشي

في هذا الدرس، سنقوم بتطبيق التكرار على متتابعة فيبوناتشي، وهي سلسلة من الأرقام حيث الرقم هو إضافة الرقمين الأخيرين، أي 0، 1، 1، 2، 3، 5، 8، 13، 21، 34، وهكذا دواليك. يبدأ التسلسل من 0 وبالتالي فإن الرقم n هو مجموع الأرقام (n-1) th و (n-2) th.

في عالم علوم الكمبيوتر، يعد التكرار طريقة يعتمد فيها حل المشكلة على حالات أصغر من نفس المشكلة. إنها عملية تطلق فيها الوظيفة على نفسها اسم روتين فرعي. يسمح هذا باستدعاء الوظيفة بعدد أقل من الحجج، مما يقلل من كمية معلومات الحالة التي تحتاج الوظيفة إلى الحفاظ عليها، ويوفر وسيلة أنيقة وموجزة للغاية للتعبير عن حلول لبعض أنواع المشكلات. غالبًا ما يُنظر إلى التكرار على أنه مفهوم صعب للمبتدئين لفهمه. ومع ذلك، عند فهمها بشكل صحيح، يمكن أن تكون أداة قوية للغاية في ترسانة المبرمج. يمكن أن يساعد في إنشاء كود أنظف وأكثر إيجازًا، ويمكن استخدامه غالبًا لحل المشكلات المعقدة باستخدام حلول بسيطة وأنيقة.

في هذا الدرس، سنقوم بتطبيق التكرار على متتابعة فيبوناتشي، وهي سلسلة من الأرقام حيث الرقم هو إضافة الرقمين الأخيرين، أي 0، 1، 1، 2، 3، 5، 8، 13، 21، 34، وهكذا دواليك. يبدأ التسلسل من 0 وبالتالي فإن الرقم n هو مجموع الأرقام (n-1) th و (n-2) th.

المشاهدات المتكررة في SmartPy

في SmartPy، يتم تنفيذ التكرار من خلال السماح لوظيفة ما باستدعاء نفسها ضمن تعريفها الخاص. هذه الطريقة مفيدة للغاية عند التعامل مع المشكلات التي يمكن تقسيمها إلى مشكلات فرعية أصغر ومتطابقة. العرض التكراري في SmartPy هو في الأساس عرض يستخدم التكرار. العرض هو وظيفة SmartPY التي لا تعدل مساحة تخزين العقد ولكن يمكنها القراءة منها. عندما نتحدث عن عرض تكراري، فإننا نعني وظيفة العرض التي تستدعي نفسها أثناء تنفيذها.

متتابعة فيبوناتشي

تسلسل فيبوناتشي هو مجموعة من الأرقام حيث يكون كل رقم هو مجموع الرقمين السابقين، بدءًا من 0 و 1. يوفر هذا التسلسل، على الرغم من بساطته، أساسًا ممتازًا لفهم التكرار نظرًا لطبيعته التكرارية.

يتم تحديد تسلسل فيبوناتشي من خلال علاقة التكرار:

SCSS
F (ن) = F (ن-1) +F (ن-2)

مع الشروط الأولية هي F (0) = 0، و F (1) = 1. هذا يعني أنه للحصول على الرقم nفي تسلسل فيبوناتشي، نضيف (n-1) -th والرقم (n-2) -th. هذه الطبيعة التكرارية هي بالضبط ما يجعل تسلسل فيبوناتشي مناسبًا تمامًا لفهم التكرار. الآن بعد أن أصبح لدينا فهم أفضل للتكرار وكيفية تطبيقه على تسلسل فيبوناتشي، دعنا نتعمق في كود SmartPy الذي يطبق عرضًا متكررًا لحساب تسلسل فيبوناتشي.

شرح التعليمات البرمجية

يحدد رمز SmartPy المحدد العقد، FibonacciView، الذي يحسب تسلسل فيبوناتشي باستخدام طريقة عرض متكررة. هذا مثال رائع لفهم كيفية إنشاء الوظائف التكرارية واستخدامها في SmartPY.

الثعبان
الاستيراد بذكاء كسبا


@sp. وحدة
تعريف رئيسي ():
 عرض فيبوناتشي من الفئة (عقد SP):
 """قم بالتعاقد باستخدام طريقة عرض متكررة لحساب مجموع أرقام فيبوناتشي. """

        @sp .onchain_view ()
 ديف فيبوناتشي (self, n):
 """قم بإرجاع مجموع أرقام فيبوناتشي حتى n.

            الفنون:
 n (sp.int): عدد أرقام فيبوناتشي المراد جمعها.
            الإرجاع:
 (sp.int): مجموع أرقام فيبوناتشي
 """
 sp.cast (لا، دولي)
 إذا كان الرقم < 2:
 ارجع إلى
 وإلا:
 n1 = sp.view ("فيبوناتشي، " sp.self_address ()، n - 1، int) .unwrap_some ()
 n2 = sp.view ("فيبوناتشي، " sp.self_address ()، n - 2، int) .unwrap_some ()
                إرجاع رقم 1 + ن2


إذا لم " تكن " القوالب موجودة في __name__:

 @sp .add_test (الاسم = سيناريو عرض " فيبوناتشي الأساسي، is_default= صحيح) "
 سيناريو التعريف الأساسي ():
 sc = سيناريو sp.test_( رئيسي)
        sc.h1 (السيناريو " الأساسي. ")
        sc.h2 (الإنشاء)". ")
        c1 = عرض فيبوناتشي الرئيسي ()
 اس سي += ج1
 sc.verify (c1.فيبوناتشي (8) == 21)

يحتوي عقد FibonacciView هذا على دالة العرض التكراري، وهي فيبوناتشي، والتي تُرجع رقم فيبوناتشي التاسع.

تم تزيين الوظيفة بـ @sp.onchain_view ()، مما يشير إلى أن هذه عملية للقراءة فقط على مساحة تخزين العقد. تأخذ هذه الدالة عددًا صحيحًا n كوسيطة تمثل الموضع في تسلسل فيبوناتشي الذي نريد استرداده.

داخل الوظيفة، قمنا أولاً بإرسال n إلى عدد صحيح من أجل الأمان. يأتي الجزء التكراري من الوظيفة بعد ذلك. إذا كان n أقل من 2، فإننا ببساطة نعيد n لأن أول رقمين من تسلسل فيبوناتشي هما 0 و 1. إذا كان n أكبر أو يساوي 2، فإننا نحسب رقم فيبوناتشي التاسع عن طريق استدعاء دالة فيبوناتشي بشكل متكرر لـ n-1 و n-2، ثم إضافة النتائج. هذا يتوافق مع علاقة التكرار التي تحدد تسلسل فيبوناتشي. تقوم مكالمات sp.view بإنشاء هذه المكالمات المتكررة إلى دالة فيبوناتشي نفسها.

استخدام حلقة لتحقيق الكفاءة
في حين أن التكرار يعد مفهومًا قيمًا للفهم، فمن المهم ملاحظة أنه يمكن أن يكون أقل كفاءة ويتطلب المزيد من الموارد الحسابية، خاصة عند التعامل مع الأعداد الكبيرة. ولتجنب مشاكل مثل تجاوز سعة المكدس، سيكون النهج الأكثر كفاءة هو استخدام حلقة لحساب تسلسل فيبوناتشي وتخزين أرقام فيبوناتشي المحسوبة في عقد منفصل.
فيما يلي مثال عالي المستوى لكيفية تعديل عقد FibonacciView لاستخدام حلقة:
يستخدم هذا العقد المعدل، Fibonaccicalculator، حلقة لحساب أرقام فيبوناتشي بكفاءة وتخزينها في مخزن العقد. يمكنك بعد ذلك الاتصال بنقطة دخول calculate_fibonacci لاسترداد رقم فيبوناتشي التاسع.
هذا النهج أكثر كفاءة في استخدام الموارد ومناسب للقيم الأكبر لـ n.
الثعبان
@sp .moduledef الرئيسي ():
 حاسبة فيبوناتشي من الفئة (عقد SP):
 """عقد لحساب تسلسل فيبوناتشي بكفاءة. """الدفاع __init__(الذات):
 self.init (التخزين = sp.map (tkey = sp.tint، قيمة T=sp.tint) .set (0، 0). مجموعة (1، 1)

 @sp .entry_pointdef يحسب_فيبوناتشي (الذات، n):
 sp.verify (n > = 0، يجب أن تكون الرسالة = " n غير سلبية) "
 التخزين = البيانات الذاتية
 بالنسبة لي في النطاق (2، n + 1):
 next_fib = التخزين [i - 1] + التخزين [i - 2]
 التخزين = storage.set (i، next_fib)
 sp.result (التخزين [n])

دعنا نواصل قسم الاختبار.

في دالة الاختبار basic_scenario، نقوم بإنشاء مثيل جديد لعقد FibonacciView ، وإضافته إلى السيناريو الخاص بنا، ثم نستخدم sc.verify للتحقق من أن رقم فيبوناتشي الثامن هو 21، وهو ما ينطبق على تسلسل فيبوناتشي.

تشغيل الكود في SmartPY IDE

لتشغيل التعليمات البرمجية:

  1. افتح واجهة مستخدم SmartPY.

  2. انسخ الكود المقدم والصقه في المحرر.

  3. انقر على زر «تشغيل». يجب أن تشاهد سيناريو الاختبار الذي يتم تنفيذه على الجانب الأيمن من IDE. سترى العمليات التي يتم تنفيذها والشيكات التي يتم التحقق منها.
    لقد غطى هذا الدرس الكثير من المجالات. لقد انتقلنا من أساسيات التكرار وكيفية استخدامه في البرمجة، إلى المشاهدات التكرارية في SmartPY، وحتى تطبيق هذه المفاهيم على تسلسل فيبوناتشي. لقد استكشفنا أيضًا مثالًا لرمز العمل في SmartPY، وتعلمت كيفية تشغيل هذا الرمز والتحقق منه في SmartPY IDE.

ข้อจำกัดความรับผิด
* การลงทุนคริปโตมีความเสี่ยงสูง โปรดดำเนินการด้วยความระมัดระวัง หลักสูตรนี้ไม่ได้มีไว้เพื่อเป็นคำแนะนำในการลงทุน
* หลักสูตรนี้สร้างขึ้นโดยผู้เขียนที่ได้เข้าร่วม Gate Learn ความคิดเห็นของผู้เขียนไม่ได้มาจาก Gate Learn
แคตตาล็อก
บทเรียนที่ 5

فهم وجهات النظر المتكررة باستخدام فيبوناتشي

في هذا الدرس، سنقوم بتطبيق التكرار على متتابعة فيبوناتشي، وهي سلسلة من الأرقام حيث الرقم هو إضافة الرقمين الأخيرين، أي 0، 1، 1، 2، 3، 5، 8، 13، 21، 34، وهكذا دواليك. يبدأ التسلسل من 0 وبالتالي فإن الرقم n هو مجموع الأرقام (n-1) th و (n-2) th.

في عالم علوم الكمبيوتر، يعد التكرار طريقة يعتمد فيها حل المشكلة على حالات أصغر من نفس المشكلة. إنها عملية تطلق فيها الوظيفة على نفسها اسم روتين فرعي. يسمح هذا باستدعاء الوظيفة بعدد أقل من الحجج، مما يقلل من كمية معلومات الحالة التي تحتاج الوظيفة إلى الحفاظ عليها، ويوفر وسيلة أنيقة وموجزة للغاية للتعبير عن حلول لبعض أنواع المشكلات. غالبًا ما يُنظر إلى التكرار على أنه مفهوم صعب للمبتدئين لفهمه. ومع ذلك، عند فهمها بشكل صحيح، يمكن أن تكون أداة قوية للغاية في ترسانة المبرمج. يمكن أن يساعد في إنشاء كود أنظف وأكثر إيجازًا، ويمكن استخدامه غالبًا لحل المشكلات المعقدة باستخدام حلول بسيطة وأنيقة.

في هذا الدرس، سنقوم بتطبيق التكرار على متتابعة فيبوناتشي، وهي سلسلة من الأرقام حيث الرقم هو إضافة الرقمين الأخيرين، أي 0، 1، 1، 2، 3، 5، 8، 13، 21، 34، وهكذا دواليك. يبدأ التسلسل من 0 وبالتالي فإن الرقم n هو مجموع الأرقام (n-1) th و (n-2) th.

المشاهدات المتكررة في SmartPy

في SmartPy، يتم تنفيذ التكرار من خلال السماح لوظيفة ما باستدعاء نفسها ضمن تعريفها الخاص. هذه الطريقة مفيدة للغاية عند التعامل مع المشكلات التي يمكن تقسيمها إلى مشكلات فرعية أصغر ومتطابقة. العرض التكراري في SmartPy هو في الأساس عرض يستخدم التكرار. العرض هو وظيفة SmartPY التي لا تعدل مساحة تخزين العقد ولكن يمكنها القراءة منها. عندما نتحدث عن عرض تكراري، فإننا نعني وظيفة العرض التي تستدعي نفسها أثناء تنفيذها.

متتابعة فيبوناتشي

تسلسل فيبوناتشي هو مجموعة من الأرقام حيث يكون كل رقم هو مجموع الرقمين السابقين، بدءًا من 0 و 1. يوفر هذا التسلسل، على الرغم من بساطته، أساسًا ممتازًا لفهم التكرار نظرًا لطبيعته التكرارية.

يتم تحديد تسلسل فيبوناتشي من خلال علاقة التكرار:

SCSS
F (ن) = F (ن-1) +F (ن-2)

مع الشروط الأولية هي F (0) = 0، و F (1) = 1. هذا يعني أنه للحصول على الرقم nفي تسلسل فيبوناتشي، نضيف (n-1) -th والرقم (n-2) -th. هذه الطبيعة التكرارية هي بالضبط ما يجعل تسلسل فيبوناتشي مناسبًا تمامًا لفهم التكرار. الآن بعد أن أصبح لدينا فهم أفضل للتكرار وكيفية تطبيقه على تسلسل فيبوناتشي، دعنا نتعمق في كود SmartPy الذي يطبق عرضًا متكررًا لحساب تسلسل فيبوناتشي.

شرح التعليمات البرمجية

يحدد رمز SmartPy المحدد العقد، FibonacciView، الذي يحسب تسلسل فيبوناتشي باستخدام طريقة عرض متكررة. هذا مثال رائع لفهم كيفية إنشاء الوظائف التكرارية واستخدامها في SmartPY.

الثعبان
الاستيراد بذكاء كسبا


@sp. وحدة
تعريف رئيسي ():
 عرض فيبوناتشي من الفئة (عقد SP):
 """قم بالتعاقد باستخدام طريقة عرض متكررة لحساب مجموع أرقام فيبوناتشي. """

        @sp .onchain_view ()
 ديف فيبوناتشي (self, n):
 """قم بإرجاع مجموع أرقام فيبوناتشي حتى n.

            الفنون:
 n (sp.int): عدد أرقام فيبوناتشي المراد جمعها.
            الإرجاع:
 (sp.int): مجموع أرقام فيبوناتشي
 """
 sp.cast (لا، دولي)
 إذا كان الرقم < 2:
 ارجع إلى
 وإلا:
 n1 = sp.view ("فيبوناتشي، " sp.self_address ()، n - 1، int) .unwrap_some ()
 n2 = sp.view ("فيبوناتشي، " sp.self_address ()، n - 2، int) .unwrap_some ()
                إرجاع رقم 1 + ن2


إذا لم " تكن " القوالب موجودة في __name__:

 @sp .add_test (الاسم = سيناريو عرض " فيبوناتشي الأساسي، is_default= صحيح) "
 سيناريو التعريف الأساسي ():
 sc = سيناريو sp.test_( رئيسي)
        sc.h1 (السيناريو " الأساسي. ")
        sc.h2 (الإنشاء)". ")
        c1 = عرض فيبوناتشي الرئيسي ()
 اس سي += ج1
 sc.verify (c1.فيبوناتشي (8) == 21)

يحتوي عقد FibonacciView هذا على دالة العرض التكراري، وهي فيبوناتشي، والتي تُرجع رقم فيبوناتشي التاسع.

تم تزيين الوظيفة بـ @sp.onchain_view ()، مما يشير إلى أن هذه عملية للقراءة فقط على مساحة تخزين العقد. تأخذ هذه الدالة عددًا صحيحًا n كوسيطة تمثل الموضع في تسلسل فيبوناتشي الذي نريد استرداده.

داخل الوظيفة، قمنا أولاً بإرسال n إلى عدد صحيح من أجل الأمان. يأتي الجزء التكراري من الوظيفة بعد ذلك. إذا كان n أقل من 2، فإننا ببساطة نعيد n لأن أول رقمين من تسلسل فيبوناتشي هما 0 و 1. إذا كان n أكبر أو يساوي 2، فإننا نحسب رقم فيبوناتشي التاسع عن طريق استدعاء دالة فيبوناتشي بشكل متكرر لـ n-1 و n-2، ثم إضافة النتائج. هذا يتوافق مع علاقة التكرار التي تحدد تسلسل فيبوناتشي. تقوم مكالمات sp.view بإنشاء هذه المكالمات المتكررة إلى دالة فيبوناتشي نفسها.

استخدام حلقة لتحقيق الكفاءة
في حين أن التكرار يعد مفهومًا قيمًا للفهم، فمن المهم ملاحظة أنه يمكن أن يكون أقل كفاءة ويتطلب المزيد من الموارد الحسابية، خاصة عند التعامل مع الأعداد الكبيرة. ولتجنب مشاكل مثل تجاوز سعة المكدس، سيكون النهج الأكثر كفاءة هو استخدام حلقة لحساب تسلسل فيبوناتشي وتخزين أرقام فيبوناتشي المحسوبة في عقد منفصل.
فيما يلي مثال عالي المستوى لكيفية تعديل عقد FibonacciView لاستخدام حلقة:
يستخدم هذا العقد المعدل، Fibonaccicalculator، حلقة لحساب أرقام فيبوناتشي بكفاءة وتخزينها في مخزن العقد. يمكنك بعد ذلك الاتصال بنقطة دخول calculate_fibonacci لاسترداد رقم فيبوناتشي التاسع.
هذا النهج أكثر كفاءة في استخدام الموارد ومناسب للقيم الأكبر لـ n.
الثعبان
@sp .moduledef الرئيسي ():
 حاسبة فيبوناتشي من الفئة (عقد SP):
 """عقد لحساب تسلسل فيبوناتشي بكفاءة. """الدفاع __init__(الذات):
 self.init (التخزين = sp.map (tkey = sp.tint، قيمة T=sp.tint) .set (0، 0). مجموعة (1، 1)

 @sp .entry_pointdef يحسب_فيبوناتشي (الذات، n):
 sp.verify (n > = 0، يجب أن تكون الرسالة = " n غير سلبية) "
 التخزين = البيانات الذاتية
 بالنسبة لي في النطاق (2، n + 1):
 next_fib = التخزين [i - 1] + التخزين [i - 2]
 التخزين = storage.set (i، next_fib)
 sp.result (التخزين [n])

دعنا نواصل قسم الاختبار.

في دالة الاختبار basic_scenario، نقوم بإنشاء مثيل جديد لعقد FibonacciView ، وإضافته إلى السيناريو الخاص بنا، ثم نستخدم sc.verify للتحقق من أن رقم فيبوناتشي الثامن هو 21، وهو ما ينطبق على تسلسل فيبوناتشي.

تشغيل الكود في SmartPY IDE

لتشغيل التعليمات البرمجية:

  1. افتح واجهة مستخدم SmartPY.

  2. انسخ الكود المقدم والصقه في المحرر.

  3. انقر على زر «تشغيل». يجب أن تشاهد سيناريو الاختبار الذي يتم تنفيذه على الجانب الأيمن من IDE. سترى العمليات التي يتم تنفيذها والشيكات التي يتم التحقق منها.
    لقد غطى هذا الدرس الكثير من المجالات. لقد انتقلنا من أساسيات التكرار وكيفية استخدامه في البرمجة، إلى المشاهدات التكرارية في SmartPY، وحتى تطبيق هذه المفاهيم على تسلسل فيبوناتشي. لقد استكشفنا أيضًا مثالًا لرمز العمل في SmartPY، وتعلمت كيفية تشغيل هذا الرمز والتحقق منه في SmartPY IDE.

ข้อจำกัดความรับผิด
* การลงทุนคริปโตมีความเสี่ยงสูง โปรดดำเนินการด้วยความระมัดระวัง หลักสูตรนี้ไม่ได้มีไว้เพื่อเป็นคำแนะนำในการลงทุน
* หลักสูตรนี้สร้างขึ้นโดยผู้เขียนที่ได้เข้าร่วม Gate Learn ความคิดเห็นของผู้เขียนไม่ได้มาจาก Gate Learn