مقالات

15.5: المتواليات العودية المعقدة


سنستكشف الآن التسلسلات المحددة بشكل متكرر للأعداد المركبة.

تسلسل تكراري

أ علاقة عودية هي صيغة تربط القيمة التالية ، (z_ {n + 1} ، ) في تسلسل للقيمة السابقة ، (z_ {n}. ) بالإضافة إلى الصيغة ، نحتاج إلى قيمة أولية ، (z_ {0} ).

تسلسل القيم المنتجة هو التسلسل العودي.

المثال 15

بالنظر إلى العلاقة العودية (z_ {n + 1} = z_ {n} +2، quad z_ {0} = 4، ) قم بإنشاء عدة مصطلحات من
تسلسل متكرر.

المحلول

لدينا قيمة البداية ، (z_ {0} = 4. ) تنطبق الصيغة العودية على أي قيمة (n ، ) لذلك
إذا (n = 0، ) إذن (z_ {n + 1} = z_ {n} +2 ) سيخبرنا (z_ {0 + 1} = z_ {0} +2، ) أو أكثر ببساطة ، (z_ {1} = z_ {0} +2 )

لاحظ أن هذا يعرّف (z_ {1} ) من حيث (z_ {0}، ) المعروف حتى نتمكن من حساب القيمة:
(z_ {1} = z_ {0} + 2 = 4 + 2 = 6 )

دعنا الآن (n = 1، ) تخبرنا الصيغة (z_ {1 + 1} = z_ {1} +2، ) أو (z_ {2} = z_ {1} +2. ) مرة أخرى ، تعطي الصيغة القيمة التالية في التسلسل من حيث القيمة السابقة.

(z_ {2} = z_ {1} + 2 = 6 + 2 = 8 )

استمرار ،

(z_ {3} = z_ {2} + 2 = 8 + 2 = 10 )

(z_ {4} = z_ {3} + 2 = 10 + 2 = 12 )

أنشأ المثال السابق تسلسلًا خطيًا أساسيًا للأرقام الحقيقية. يمكن استخدام نفس العملية مع الأعداد المركبة.

المثال 16

بالنظر إلى العلاقة العودية (z_ {n + 1} = z_ {n} cdot i + (1-i) ، quad z_ {0} = 4، ) قم بإنشاء عدة مصطلحات من
تسلسل متكرر.

المحلول

لدينا (z_ {0} = 4. ) باستخدام الصيغة العودية:

(z_ {1} = z_ {0} cdot i + (1-i) = 4 cdot i + (1-i) = 1 + 3 i )

(z_ {2} = z_ {1} cdot i + (1-i) = (1 + 3 i) cdot i + (1-i) = i + 3 i ^ {2} + (1-i) = ط 3 + (1-ط) = - 2 )

(z_ {3} = z_ {2} cdot i + (1-i) = (- 2) cdot i + (1-i) = - 2 i + (1-i) = 1-3 i )

(z_ {4} = z_ {3} cdot i + (1-i) = (1-3 i) cdot i + (1-i) = i-3 i ^ {2} + (1-i) = أنا + 3 + (1-ط) = 4 )

(z_ {5} = z_ {4} cdot i + (1-i) = 4 cdot i + (1-i) = 1 + 3 i )

لاحظ أن هذا التسلسل يُظهر نمطًا مثيرًا للاهتمام - فقد بدأ في تكرار نفسه.

مجموعة ماندلبروت

مجموعة ماندلبروت عبارة عن مجموعة من الأرقام المحددة بناءً على التسلسلات العودية

مجموعة ماندلبروت

لأي رقم مركب (c، ) حدد التسلسل (z_ {n + 1} = z_ {n} ^ {2} + c، quad z_ {0} = 0 )

إذا ظل هذا التسلسل دائمًا قريبًا من الأصل (في حدود وحدتين) ، فإن الرقم (ج ) هو جزء من مجموعة ماندلبروت. إذا كان التسلسل بعيدًا عن الأصل ، فإن الرقم (ج ) ليس جزءًا من المجموعة.

المثال 17

حدد ما إذا كان (c = 1 + i ) جزءًا من مجموعة Mandelbrot.

المحلول

نبدأ بـ (z_ {0} = 0 ). نواصل ، مع حذف بعض التفاصيل من الحسابات

(z_ {1} = z_ {0} ^ {2} + 1 + i = 0 + 1 + i = 1 + i )

(z_ {2} = z_ {1} ^ {2} + 1 + i = (1 + i) ^ {2} + 1 + i = 1 + 3 i )

(z_ {3} = z_ {2} ^ {2} + 1 + i = (1 + 3 i) ^ {2} + 1 + i = -7 + 7 i )

(z_ {4} = z_ {3} ^ {2} + 1 + i = (- 7 + 7 i) ^ {2} + 1 + i = 1-97 i )

يمكننا أن نرى بالفعل أن هذه القيم تزداد اتساعًا. لا يبدو أن (c = 1 + i ) جزء من مجموعة Mandelbrot.

المثال 18

حدد ما إذا كان (c = 0.5 i ) جزءًا من مجموعة Mandelbrot.

المحلول

نبدأ بـ (z_ {0} = 0 ). نواصل ، مع حذف بعض التفاصيل من الحسابات

(z_ {1} = z_ {0} ^ {2} +0.5 i = 0 + 0.5 i = 0.5 i )

(z_ {2} = z_ {1} ^ {2} +0.5 i = (0.5 i) ^ {2} +0.5 i = -0.25 + 0.5 i )

(z_ {3} = z_ {2} ^ {2} +0.5 i = (- 0.25 + 0.5 i) ^ {2} +0.5 i = -0.1875 + 0.25 i )

(z_ {4} = z_ {3} ^ {2} +0.5 i = (- 0.1875 + 0.25 i) ^ {2} +0.5 i = -0.02734 + 0.40625 i )

في حين أن هذه التكرارات القليلة ليست نهائية ، إلا أنه يبدو أن هذه القيمة تظل صغيرة ، مما يشير إلى أن (0.5 i ) جزء من مجموعة Mandelbrot.

جربه الآن 5

حدد ما إذا كان (c = 0.4 + 0.3 i ) جزءًا من مجموعة Mandelbrot.

إجابه

(z_ {1} = z_ {0} ^ {2} + 0.4 + 0.3 i = 0 + 0.4 + 0.3 i = 0.4 + 0.3 i )

(z_ {2} = z_ {1} ^ {2} + 0.4 + 0.3 i = (0.4 + 0.3 i) ^ {2} + 0.4 + 0.3 i = 0.47 + 0.54 i )

(z_ {3} = z_ {2} ^ {2} +0.5 i = (- 0.25 + 0.5 i) ^ {2} +0.5 i = -0.1875 + 0.25 i )

(z_ {4} = z_ {3} ^ {2} +0.5 i = (- 0.1875 + 0.25 i) ^ {2} +0.5 i = -0.02734 + 0.40625 i )

إذا تم اختبار جميع الأعداد المركبة ، وقمنا برسم كل رقم موجود في مجموعة Mandelbrot على المستوى المركب ، نحصل على الشكل إلى اليمين [1].

تُظهر حدود هذا الشكل شبه تشابه ذاتي ، في تلك الأجزاء تبدو متشابهة جدًا مع الكل.

بالإضافة إلى تلوين ماندلبروت نفسها باللون الأسود ، فمن الشائع أن تلون النقاط في المستوى المركب المحيط بالمجموعة. لإنشاء تلوين ذي مغزى ، غالبًا ما يحسب الأشخاص عدد التكرارات للتسلسل العودي المطلوب لنقطة لتتخطى وحدتين بعيدًا عن الأصل. على سبيل المثال ، باستخدام (c = 1 + i ) أعلاه ، كان التسلسل هو المسافة 2 من الأصل بعد تكرارين فقط.

بالنسبة لبعض الأرقام الأخرى ، قد يستغرق الأمر عشرات أو مئات التكرارات حتى يبتعد التسلسل عن الأصل. يتم تلوين الأرقام التي تكبر بسرعة في ظل واحد ، بينما يتم تلوين الألوان البطيئة النمو بظل آخر. على سبيل المثال ، في الصورة أدناه [2] ، يتم استخدام اللون الأزرق الفاتح للأرقام التي تكبر بسرعة ، بينما يتم استخدام الظلال الداكنة للأرقام التي تنمو بشكل أبطأ. يمكن رؤية الخضر والأحمر والأرجواني عند التكبير - وتستخدم تلك الأرقام للأرقام التي تنمو ببطء شديد.

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


[1] en.Wikipedia.org/wiki/File:Mandelset_hires.png

[2] تم إنشاء هذه السلسلة باستخدام Scott's Mandelbrot Set Explorer


إثبات ذلك باستخدام الحث. يعتمد ما إذا كان التسلسل يتزايد أم يتناقص على قيمة $ a_1 $. لاحظ أن $ a_n le a_ يدل على 4a_n + 3 le 4a_ + 3 يعني أ_ le a_$ وبالمثل $ a_n ge a_ يدل على 4a_n + 3 ge 4a_ + 3 يعني أ_ جنرال الكتريك أ_. وبالتالي ، إذا كان التسلسل الكامل $ a_1 le a_2 $ غير متناقص ، وإذا كان $ a_1 ge a_2 $ ، فإن التسلسل الكامل غير متزايد.

إذا افترضت أن الحد موجود ، فإن $ L = lim_يجب أن يرضي a_n $: $ L ^ 2 = 4L + 3 ، qquad L geq 0 ، ومن ثم فإن الحد ، إذا كان موجودًا ، هو $ 2 + sqrt <7> $. ضع في اعتبارك الآن أن إجابةUmberto P. تعطي التسلسل $ _<>> $ رتيب.

من خلال استمرارية تعريفنا العودي: إذا تقارب هذا التسلسل إلى حد $ a $ ، فسيكون هذا الحد حلاً للمعادلة $ a = sqrt <4a + 3> $ لذا ، لحل $ a $ ، لدينا $ a ^ 2 - 4a - 3 = 0 يشير إلى a = frac <4 pm sqrt <4 ^ 2 +4 cdot 3 >> <2> = 2 pm sqrt <7> $ التوصيل ب المعادلة الأصلية ، نجد أن $ 2 - sqrt <7> $ هو جذر غريب ، لذا فإن الاحتمال الوحيد هو $ a = 2 + sqrt <7> $.

يبقى أن نوضح أن التسلسل ، في الواقع ، يتقارب مع هذا الحد (الذي غطته الإجابات الأخرى).

فكرة تضيفها إلى محاولاتك: حاول استخدام حقيقة أن $ a_n $ سيكون دائمًا في فاصل زمني بالصيغة $ (a، a + epsilon) $.


أمثلة سريعة كيو تي - الرسوم المتحركة

حيوية عبارة عن مجموعة من أمثلة QML الصغيرة المتعلقة بالرسوم المتحركة. كل مثال هو ملف QML صغير يركز على نوع أو ميزة معينة.

تشغيل المثال

لتشغيل المثال من Qt Creator ، افتح ملف أهلا بك الوضع وحدد المثال من أمثلة. لمزيد من المعلومات ، قم بزيارة إنشاء نموذج وتشغيله.

اللون

اللون يستخدم الرسوم المتحركة الملونة لتلاشي السماء من النهار إلى الليل.

الملكيةالرسوم المتحركة

الملكيةالرسوم المتحركة يستخدم الرسوم المتحركة للأرقام لترتد دائرة لأعلى ولأسفل.

الرسوم المتحركة

الرسوم المتحركة يستخدم الرسوم المتحركة لترتد أيقونة لأعلى ولأسفل.

السلوكيات

السلوكيات يستخدم السلوكيات لنقل مستطيل إلى حيث تنقر.

نص متذبذب

نص متذبذب يوضح استخدام سلوكيات أكثر تعقيدًا لتحريك بعض النصوص وتذبذبها أثناء سحبها. يقوم بذلك عن طريق تعيين ارتباط معقد لكل حرف:

ثم يستخدم السلوكيات لتحريك حركة كل حرف:

تنس التلفزيون

تنس التلفزيون يستخدم سلوكيات معقدة لجعل المجاذيف تتبع الكرة لمحاكاة لعبة تنس لا نهائية. مرة أخرى ، يتم تطبيق الربط الذي يعتمد على القيم الأخرى على الموضع والسلوك المقدم للرسوم المتحركة.

منحنيات التخفيف

منحنيات التخفيف يعرض جميع منحنيات التخفيف المتوفرة في الرسوم المتحركة السريعة Qt.

تنص على

تنص على يوضح كيف يمكن أن تختلف خصائص عنصر بين الحالات.

يحدد عدة حالات:

الانتقالات

الانتقالات يأخذ مثال الولايات وينشط تغييرات الخاصية عن طريق تعيين الانتقالات:

مسار الرسوم المتحركة

مسار الرسوم المتحركة ينعش صورة على طول منحنى بيزير باستخدام PathAnimation.

PathInterpolator

PathInterpolator ينعش الصورة على طول منحنى بيزير نفسه ، باستخدام PathInterpolator بدلاً من ذلك.

© 2021 The Qt Company Ltd. مساهمات التوثيق المدرجة هنا هي حقوق الطبع والنشر لأصحابها. الوثائق المقدمة هنا مُرخصة بموجب شروط رخصة التوثيق الحرة GNU الإصدار 1.3 كما تم نشرها من قبل مؤسسة البرمجيات الحرة. Qt والشعارات الخاصة بها هي علامات تجارية لشركة The Qt Company Ltd. في فنلندا و / أو دول أخرى في جميع أنحاء العالم. جميع العلامات التجارية الأخرى هي ملك لأصحابها.


آلية تخليق البروتين

كما هو الحال مع تخليق mRNA ، يمكن تقسيم تخليق البروتين إلى ثلاث مراحل: البدء والاستطالة والإنهاء. تتشابه عملية الترجمة في بدائيات النوى وحقيقيات النوى. نحن هنا و rsquoll نستكشف كيف تحدث الترجمة بكتريا قولونية، بدائيات النوى التمثيلية ، وتحديد أي اختلافات بين ترجمة بدائية النواة وترجمة حقيقية النواة.

بدء الترجمة

يبدأ تخليق البروتين بتكوين مركب البدء. في بكتريا قولونية، يتضمن هذا المركب الريبوسوم الصغير 30S ، قالب mRNA ، ثلاثة عوامل بدء (IFs IF-1 ، IF-2 ، و IF-3) ، وبادئ خاص tRNA ، يسمى ( نص_f ^). يتفاعل البادئ tRNA مع كودون البدء AUG (أو نادرًا ، GUG) ، ويربط بميثيونين مُعدّل يسمى fMet ، ويمكنه أيضًا ربط IF-2. يتم إدخال الميثيونين المنسق بواسطة ( text - نص_f ^) في بداية كل سلسلة بولي ببتيد توليفها بكتريا قولونية، ولكن عادة ما يتم قصها بعد اكتمال الترجمة. عندما يتم مصادفة AUG داخل الإطار أثناء استطالة الترجمة ، يتم إدخال ميثيونين غير مهيأ بواسطة Met-tRNA Met منتظم.

في بكتريا قولونية يتفاعل mRNA ، وهو تسلسل منبع أول كودون AUG ، يسمى تسلسل Shine-Dalgarno (AGGAGG) ، مع جزيئات الرنا الريباسي التي تتكون منها الريبوسوم. يعمل هذا التفاعل على تثبيت الوحدة الفرعية الريبوسومية 30S في الموقع الصحيح على قالب الرنا المرسال. Guanosine triphosphate (GTP) ، وهو عبارة عن ثلاثي فوسفات نيوكليوتيد البيورين ، يعمل كمصدر للطاقة أثناء الترجمة و mdashboth في بداية الاستطالة وأثناء إزفاء الريبوسوم و rsquos.

في حقيقيات النوى ، أشكال معقدة بدء مماثلة ، تشمل mRNA ، 40S الوحدة الفرعية الريبوزومية الصغيرة ، IFs ، و nucleoside triphosphates (GTP و ATP). البادئ المشحون tRNA يسمى Met-tRNAأنا، لا يربط fMet في حقيقيات النوى ، ولكنه يختلف عن Met-tRNAs الأخرى في أنه يمكن أن يربط IFs.

بدلاً من الإيداع في تسلسل Shine-Dalgarno ، يتعرف مجمع البدء حقيقية النواة على غطاء 7-methylguanosine في نهاية 5 'من الرنا المرسال. يساعد بروتين ربط الغطاء (CBP) والعديد من IFs الأخرى في حركة الريبوسوم إلى الغطاء 5 '. بمجرد الوصول إلى الغطاء ، يتتبع مجمع البدء على طول mRNA في اتجاه 5 إلى 3 ، ويبحث عن كودون AUG. يتم ترجمة العديد من mRNAs حقيقية النواة من أول أغسطس ، ولكن هذا ليس هو الحال دائمًا. وفقًا لقواعد Kozak & rsquos ، تشير النيوكليوتيدات حول AUG إلى ما إذا كان كودون البدء الصحيح. تنص قواعد Kozak & rsquos على أن تسلسل الإجماع التالي يجب أن يظهر حول AUG لجينات الفقاريات: 5'-gccRccAUGG-3 '. تشير R (للبيورين) إلى موقع يمكن أن يكون إما A أو G ، ولكن لا يمكن أن يكون C أو U. بشكل أساسي ، كلما اقترب التسلسل من هذا الإجماع ، زادت كفاءة الترجمة.

بمجرد تحديد AUG المناسب ، تنفصل البروتينات الأخرى و CBP ، وترتبط الوحدة الفرعية 60S بمجمع Met-tRNAأناو mRNA والوحدة 40S. تكمل هذه الخطوة بدء الترجمة في حقيقيات النوى.

الترجمة والاستطالة والإنهاء

في بدائيات النوى وحقيقيات النوى ، أساسيات الاستطالة هي نفسها ، لذلك سنراجع الاستطالة من منظور بكتريا قولونية. الوحدة الفرعية 50S الريبوسومية من بكتريا قولونية يتكون من ثلاث حجرات: موقع A (aminoacyl) يربط aminoacyl tRNAs المشحونة الواردة. يربط موقع P (peptidyl) tRNAs المشحونة التي تحمل الأحماض الأمينية التي شكلت روابط ببتيدية مع سلسلة polypeptide المتنامية ولكنها لم تنفصل بعد عن tRNA المقابل لها. يقوم موقع E (الخروج) بإطلاق الحمض النووي الريبي المنفصل بحيث يمكن إعادة شحنه بالأحماض الأمينية المجانية. هناك استثناء واحد لخط التجميع هذا من tRNAs: in بكتريا قولونية، (نص - نص_f ^) قادر على الدخول إلى موقع P مباشرة دون الدخول أولاً إلى الموقع A. وبالمثل ، فإن حقيقيات النوى Met-tRNAأنابمساعدة بروتينات أخرى من مجمع البدء ، يرتبط مباشرة بموقع P. في كلتا الحالتين ، يؤدي هذا إلى إنشاء مجمع بدء مع موقع مجاني جاهز لقبول الحمض الريبي النووي النقال المطابق للكودون الأول بعد AUG.

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

يستمر الاستطالة بدخول الحمض النووي الريبي المشحون إلى الموقع A ثم الانتقال إلى الموقع P متبوعًا بالموقع E مع كل كودون مفرد و ldquostep & rdquo من الريبوسوم. يتم تحفيز خطوات الريبوسوم عن طريق التغييرات التوافقية التي تقدم الريبوسوم بثلاث قواعد في اتجاه 3. يتم التبرع بالطاقة لكل خطوة من خطوات الريبوسوم بواسطة عامل استطالة يحلل GTP. تتشكل روابط الببتيد بين المجموعة الأمينية للحمض الأميني المرتبط بـ tRNA في الموقع A ومجموعة الكربوكسيل من الحمض الأميني المرتبط بـ الحمض الريبي النووي النقال في موقع P. يتم تحفيز تكوين كل رابطة ببتيد بواسطة peptidyl transferase ، وهو إنزيم قائم على الحمض النووي الريبي المدمج في الوحدة الفرعية الريبوزومية 50S. يتم اشتقاق الطاقة لكل تكوين رابطة ببتيد من التحلل المائي GTP ، والذي يتم تحفيزه بواسطة عامل استطالة منفصل. يرتبط الحمض الأميني المرتبط بـ P-site tRNA أيضًا بسلسلة البولي ببتيد المتنامية. عندما يخطو الريبوسوم عبر mRNA ، يدخل الحمض الريبي النووي الريبي السابق للموقع P إلى موقع E ، وينفصل عن الحمض الأميني ، ويُطرد (الشكل ( فهرس الصفحة <2> )). بشكل مثير للدهشة ، فإن بكتريا قولونية يستغرق جهاز الترجمة 0.05 ثانية فقط لإضافة كل حمض أميني ، مما يعني أنه يمكن ترجمة بروتين مكون من 200 حمض أميني في 10 ثوانٍ فقط.

الشكل ( PageIndex <2> ): تبدأ الترجمة عندما يتعرف البادئ tRNA anticodon على كودون على mRNA. تنضم الوحدة الفرعية الريبوسومية الكبيرة إلى الوحدة الفرعية الصغيرة ، ويتم تجنيد الحمض الريبي النووي النقال الثاني. عندما يتحرك mRNA بالنسبة إلى الريبوسوم ، تتشكل سلسلة البولي ببتيد. يؤدي إدخال عامل التحرير إلى الموقع أ إلى إنهاء الترجمة وتنفصل المكونات.

العديد من المضادات الحيوية تمنع تخليق البروتين البكتيري. على سبيل المثال ، يحجب التتراسيكلين الموقع A على الريبوسوم البكتيري ، ويمنع الكلورامفينيكول نقل الببتيدل. ما هو التأثير المحدد الذي تتوقعه لكل من هذه المضادات الحيوية على تخليق البروتين؟

يؤثر التتراسيكلين بشكل مباشر على:

سوف يؤثر الكلورامفينيكول بشكل مباشر

يحدث إنهاء الترجمة عند مصادفة كودون لا معنى له (UAA أو UAG أو UGA). عند المحاذاة مع الموقع A ، يتم التعرف على هذه الأكواد غير المنطقية من خلال عوامل الإطلاق في بدائيات النوى وحقيقيات النوى التي توجه الببتيدل ترانسفيراز لإضافة جزيء ماء إلى نهاية الكربوكسيل للحمض الأميني P-site. يجبر هذا التفاعل الحمض الأميني P-site على الانفصال عن الحمض الريبي النووي النقال الخاص به ، ويتم إطلاق البروتين المصنوع حديثًا. تنفصل الوحدات الفرعية الريبوسومية الصغيرة والكبيرة عن الرنا المرسال ويتم تجنيدها عن بعضها على الفور تقريبًا في مجمع بدء ترجمة آخر. بعد اكتمال ترجمة العديد من الريبوسومات ، يتحلل الرنا المرسال بحيث يمكن إعادة استخدام النيوكليوتيدات في تفاعل نسخ آخر.


كيف تكتب المصطلحات الخمسة الأولى من التسلسل المعرّف بشكل متكرر # a_1 = 3 ، a_ (k + 1) = 2 (a_k-1) #؟

عندما يتم تعريف التسلسل بشكل متكرر ، يتم استخدام المصطلح السابق للعثور على المصطلح التالي. ابدأ باستخدام # a_1 # لإيجاد # a_2 # (المصطلح الثاني).

استبدل # a_1 # بـ # a_k #.
#a_ (1 + 1) = 2 (a_1-1) #
# a_2 = 2 (a_1-1) #
لأن # a_1 = 3 # ، استبدل # a_1 # بـ # 3 # لإيجاد # a_2 #.
# أ_2 = 2 (3-1) #
# أ_2 = 2 (2) #
# a_2 = 4 # هذه هي فترتك الثانية!

استخدم الآن # a_2 # للعثور على # a_3 # تمامًا مثلما استخدمت # a_1 # للعثور على # a_2 #.
#a_ (2 + 1) = 2 (a_2-1) #
# a_3 = 2 (4-1) #
# a_3 = 2 (3) #
# a_3 = 6 # هذه هي ولايتك الثالثة!

كرر هذه الخطوات للعثور على # a_4 # باستخدام # a_3 #.
#a_ (3 + 1) = 2 (a_3-1) #
# a_4 = 2 (6-1) #
# a_4 = 2 (5) #
# a_4 = 10 # هذه هي فترتك الرابعة!

ابحث عن # a_5 # باستخدام # a_4 #.
#a_ (4 + 1) = 2 (a_4-1) #
# a_5 = 2 (10-1) #
# a_5 = 2 (9) #
# a_5 = 18 # هذا هو ولايتك الخامسة!

رتب المصطلحات من الأصغر إلى الأكبر وافصل بين المصطلحات بفاصلات.


يبدأ تخليق البروتين بتكوين مركب ما قبل البدء. في بكتريا قولونية، يتضمن هذا المركب الريبوسوم الصغير 30S ، قالب mRNA ، ثلاثة عوامل بدء (IFs IF-1 ، IF-2 ، IF-3) ، وبادئ خاص tRNA ، يسمى fMet-tRNA. البادئ tRNA basepairs إلى كود البدء AUG (أو نادرًا ، GUG) ويرتبط تساهميًا بميثيونين مُعدّل يسمى fMet. الميثيونين هو واحد من 21 من الأحماض الأمينية المستخدمة في تخليق البروتين الميثيونين هو ميثيون تم ربط مجموعة الفورميل (ألدهيد أحادي الكربون) تساهميًا في النيتروجين الأميني. يتم إدخال الميثيونين المُصاغ بواسطة fMet-tRNA في بداية كل سلسلة بولي ببتيد يتم تصنيعها بواسطة بكتريا قولونية، وعادة ما يتم قصها بعد اكتمال الترجمة. عندما يتم مصادفة AUG داخل الإطار أثناء استطالة الترجمة ، يتم إدخال ميثيونين غير مهيأ بواسطة Met-tRNA منتظم. في بكتريا قولونية يتفاعل mRNA ، وهو تسلسل منبع أول كودون AUG ، يسمى تسلسل Shine-Dalgarno (AGGAGG) ، مع جزيئات الرنا الريباسي التي تتكون منها الريبوسوم. يعمل هذا التفاعل على تثبيت الوحدة الفرعية الريبوسومية 30S في الموقع الصحيح على قالب الرنا المرسال.

في حقيقيات النوى ، يتشكل مركب ما قبل البدء عندما يربط عامل بدء يسمى eIF2 (عامل بدء حقيقيات النوى 2) GTP ، ويقوم GTP-eIF2 بتجنيد البادئ حقيقيات النوى tRNA إلى الوحدة الفرعية الريبوسومية الصغيرة في الأربعينيات. البادئ tRNA ، يسمى Met-tRNAأنا، يحمل ميثيونين غير معدل في حقيقيات النوى ، وليس fMet ، ولكنه يختلف عن Met-tRNAs الخلوية الأخرى من حيث أنه يمكنه ربط eIFs ويمكنه الارتباط في موقع الريبوسوم P. يتعرف مجمع ما قبل البدء حقيقي النواة بعد ذلك على غطاء 7-ميثيل جوانوزين في الطرف 5 & الرئيسي من الرنا المرسال. العديد من eIFs الأخرى ، على وجه التحديد eIF1 و eIF3 و eIF4 ، تعمل كبروتينات ربط الغطاء وتساعد في توظيف مجمع ما قبل البدء في 5 & Prime cap. يربط Poly (A) - بروتين الربط (PAB) كلاً من ذيل بولي (A) من الرنا المرسال ومركب البروتينات في الغطاء ويساعد أيضًا في العملية. بمجرد الوصول إلى الغطاء ، يتتبع مجمع ما قبل البدء على طول mRNA في الاتجاه 5 & Prime إلى 3 & Prime ، ويبحث عن كودون AUG. يتم ترجمة العديد من mRNAs حقيقية النواة ، وليس كلها ، من تسلسل AUG الأول. تشير النيوكليوتيدات حول AUG إلى ما إذا كان كودون البدء الصحيح.

بمجرد تحديد AUG المناسب ، يحلل eIF2 GTP إلى الناتج المحلي الإجمالي ويقوي تسليم الحمض الريبي النووي النقال (tRNA)أنا-Met لبدء كودون ، حيث الحمض الريبي النووي النقالأنا anticodon basepairs إلى كودون AUG. بعد ذلك ، يتم تحرير eIF2-GDP من المجمع ، وتربط eIF5-GTP. يتم تجنيد الوحدة الفرعية الريبوزومية 60S إلى مجمع ما قبل البدء بواسطة eIF5-GTP ، والذي يحلل GTP الخاص به إلى الناتج المحلي الإجمالي لتشغيل تجميع الريبوسوم الكامل في موقع بدء الترجمة مع وضع Met-tRNAi في موقع الريبوسوم P. تنفصل eIFs المتبقية عن الريبوسوم وتكون الترجمة جاهزة للبدء.

في العتائق ، يكون بدء الترجمة مشابهًا لتلك التي شوهدت في حقيقيات النوى ، باستثناء أن عوامل البدء المعنية تسمى aIFs (عوامل البدء البدائية) ، وليس eIFs.

الشكل ( PageIndex <1> ): بدء الترجمة في حقيقيات النوى.: في حقيقيات النوى ، يتكون معقد التهيؤ المسبق من الوحدة الفرعية 40S الصغيرة ، والبادئ Met-tRNAi ، و eIF2-GTP. يرتبط مجمع preinitiation هذا بغطاء 5 & Prime-m 7 G من mRNA بمساعدة eIFS و PAB الأخرى ، والتي تربط ذيل poly (A) من mRNA ، وتربط الذيل بالغطاء. بمجرد الوصول إلى الغطاء ، ينزلق مجمع ما قبل الشروع على طول mRNA حتى يواجه كودون AUG البادئ. هناك ، يتم تحلل GTP بواسطة eIF2 و Met-tRNAأنا يتم تحميله على AUG. بعد ذلك ، يجند eIF5-GTP الوحدة الفرعية الريبوسومية الكبيرة 60S للوحدة الفرعية 40S في AUG ويتحلل GTP. يسمح هذا للوحدة الفرعية الريبوسومية الكبيرة بالتجمع فوق الوحدة الفرعية الصغيرة ، مما يؤدي إلى توليد الريبوسوم 80S السليم ، ويضع Met-tRNAi في موقع P من الريبوسوم السليم. يتم وضع موقع الريبوسوم أ فوق الكودون الثاني في إطار قراءة الرنا المرسال ، ويمكن أن تبدأ استطالة الترجمة.


الصيغ العودية للمتواليات الحسابية

أ تسلسل هي قائمة بالأرقام حيث يتم إجراء نفس العملية (العمليات) لرقم واحد للحصول على التالي. المتتاليات الحسابية تشير بشكل خاص إلى التسلسلات التي تم إنشاؤها عن طريق إضافة أو طرح قيمة - تسمى الفرق المشترك للحصول على الفصل الدراسي المقبل.

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

أعلاه مثال على معادلة للتسلسل الحسابي.

أمثلة

التسلسل: 1 ، 2 ، 3 ، 4 ،… | الصيغة: أ (ن) = ن + 13

التسلسل: 8 ، 13 ، 18 ،… | الصيغة: ب (ن) = 5 ن - 2

صيغة تكرارية

ملاحظة: يبدأ علماء الرياضيات في العد عند 1 ، لذلك وفقًا للاتفاقية ، n = 1 هو المصطلح الأول. لذلك يجب أن نحدد ما هو المصطلح الأول. ثم يتعين علينا معرفة وإدراج الفرق المشترك.

نلقي نظرة على الأمثلة مرة أخرى ،

التسلسل: 1 ، 2 ، 3 ، 4 ،… | الصيغة: أ (ن) = ن + 1 | الصيغة العودية: a (n) = a (n-1) + 1، a (1) = 1

التسلسل: 3 ، 8 ، 13 ، 18 ، ... | الصيغة: ب (ن) = 5 ن - 2 | الصيغة العودية: b (n) = b (n-1) + 5، b (1) = 3

إيجاد الصيغة (مع إعطاء تسلسل من المصطلح الأول)

إيجاد الصيغة (مع إعطاء تسلسل بدون المصطلح الأول)

معلومات اكثر:

لمزيد من المعلومات حول هذا الموضوع ، قم بزيارة

إذا كانت هذه المقالة مفيدة ، فقم بتغريدها.

تعلم البرمجة مجانا. ساعد منهج freeCodeCamp & # x27s مفتوح المصدر أكثر من 40 ألف شخص في الحصول على وظائف كمطورين. البدء

freeCodeCamp هي منظمة غير ربحية معفاة من الضرائب 501 (c) (3) مدعومة من المانحين (رقم التعريف الضريبي الفيدرالي للولايات المتحدة: 82-0779546)

مهمتنا: مساعدة الناس على تعلم البرمجة مجانًا. نحقق ذلك من خلال إنشاء الآلاف من مقاطع الفيديو والمقالات ودروس البرمجة التفاعلية - وكلها متاحة مجانًا للجمهور. لدينا أيضًا الآلاف من مجموعات دراسة freeCodeCamp حول العالم.

تذهب التبرعات إلى freeCodeCamp نحو مبادراتنا التعليمية وتساعد في الدفع مقابل الخوادم والخدمات والموظفين.


الجواب يعتمد بشدة على التنفيذ الخاص بك. على سبيل المثال الذي قدمته ، هناك العديد من الحلول الممكنة وأود أن أقول إن الطريقة الساذجة لتنفيذ حل لها تعقيد أفضل عند تنفيذها بشكل تكراري. فيما يلي عمليتا التنفيذ:

في كلا التطبيقين ، افترضت أن الإدخال الصحيح ، أي n> = 1. الرمز الأول أطول بكثير ولكن تعقيده هو O (n) أي خطي ، في حين أن التنفيذ الثاني أقصر ولكن له تعقيد أسي O (fib (n)) = O (φ ^ n) (φ = (1 + √5) / 2) وبالتالي يكون أبطأ بكثير. يمكن للمرء تحسين النسخة العودية عن طريق إدخال memoization (أي تذكر قيم الإرجاع للوظيفة التي قمت بحسابها بالفعل). يتم ذلك عادةً عن طريق إدخال مصفوفة حيث تخزن القيم. هنا مثال:

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


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

الخوارزمية المذكورة أعلاه بطيئة جدًا وليست مفيدة جدًا في المواقف الحقيقية. هناك بديل سريع وفعال.

تعد خوارزمية تسلسل فيبوناتشي باستخدام البرمجة الديناميكية بمثابة تحسين على العودية العادية.

في المثال التكراري ، نرى أن نفس الحساب يتم عدة مرات مما يزيد من إجمالي الوقت الحسابي.

تحل البرمجة الديناميكية هذه المشكلة لأنها تخزن الحسابات السابقة بأمان للاستخدام في المستقبل.

البرمجة الديناميكية سهلة للغاية مقارنة بالتكرار وكلنا نستخدمها في معظم الأوقات.

خوارزمية أرقام فيبوناتشي باستخدام البرمجة الديناميكية.

التعقيد الزمني لهذه الخوارزمية للعثور على أرقام فيبوناتشي باستخدام البرمجة الديناميكية هو O (n).

والسبب في ذلك بسيط ، فنحن نحتاج فقط إلى تكرار n مرة وجمع العددين السابقين.

فيما يلي تمثيل مرئي لكيفية عمل خوارزمية البرمجة الديناميكية بشكل أسرع.

تقوم البرمجة الديناميكية بتخزين العناصر المحسوبة مسبقًا

من الواضح هنا أن هذا النهج يخزن العناصر المحسوبة السابقة ويستخدمها للعثور على عنصر جديد.


تعزيز مكتبات C ++

يتم تحديد حاوية الاتحاد المميزة في بعض مجموعة الأنواع من خلال إنشاء مثيل لقالب فئة boost :: variant بالأنواع المرغوبة. تسمى هذه الأنواع أنواع محدودة وتخضع لمتطلبات نوع محدود مفهوم. يمكن تحديد أي عدد من الأنواع المحدودة ، حتى حد معين من قبل التنفيذ (راجع BOOST_VARIANT_LIMIT_TYPES).

على سبيل المثال ، يعلن ما يلي عن حاوية إتحاد مميزة على int و std :: string:

بشكل افتراضي ، يبني المتغير الافتراضي نوع الحد الأول الخاص به ، لذلك تحتوي v مبدئيًا على int (0). إذا لم يكن ذلك مطلوبًا ، أو إذا لم يكن النوع المحدد الأول قابلاً للتكوين افتراضيًا ، فيمكن إنشاء متغير مباشرةً من أي قيمة قابلة للتحويل إلى أحد أنواعها المحددة. وبالمثل ، يمكن تعيين أي متغير أي قيمة قابلة للتحويل إلى أحد أنواعه المحددة ، كما هو موضح في ما يلي:

الآن يحتوي v على سلسلة std :: string تساوي "hello". يمكننا إثبات ذلك من خلال تدفق & # 160 فولت للإخراج القياسي:

على الرغم من ذلك ، نود في العادة أن نتعامل مع محتوى متغير أكثر من البث. وبالتالي ، نحن بحاجة إلى طريقة ما للوصول إلى القيمة المضمنة. هناك طريقتان لإنجاز ذلك: application_visitor ، وهو الأكثر أمانًا وقوة للغاية ، و get & ltT & gt ، والذي يكون أحيانًا أكثر ملاءمة للاستخدام.

على سبيل المثال ، لنفترض أننا أردنا الربط بالسلسلة المضمنة في v. مع استرجاع القيمة عن طريق get ، يمكن تحقيق ذلك بكل بساطة ، كما هو موضح في ما يلي:

حسب الرغبة ، فإن السلسلة النصية التي يحتوي عليها v الآن تساوي "hello world!". مرة أخرى ، يمكننا إثبات ذلك من خلال دفق v إلى الإخراج القياسي:

في حين أن استخدام get مقبول تمامًا في هذا المثال التافه ، إلا أنه يعاني عمومًا من العديد من أوجه القصور المهمة. على سبيل المثال ، إذا كتبنا وظيفة تقبل المتغير & ltint ، std :: string & gt ، فلن نعرف ما إذا كان المتغير الذي تم تمريره يحتوي على int أو std :: string. إذا أصررنا على الاستمرار في استخدام get ، فسنحتاج إلى الاستعلام عن المتغير لنوعه المحتوي. الوظيفة التالية ، التي "تضاعف" محتوى المتغير المحدد ، توضح هذا النهج:

ومع ذلك ، فإن هذا الرمز هش للغاية ، ومن المحتمل أن يؤدي عدم الاهتمام الدقيق إلى إدخال أخطاء منطقية دقيقة لا يمكن اكتشافها إلا في وقت التشغيل. على سبيل المثال ، ضع في اعتبارك ما إذا كنا نرغب في تمديد times_two للعمل على متغير بأنواع محددة إضافية. على وجه التحديد ، دعنا نضيف std :: complex & ltdouble & gt إلى المجموعة. من الواضح أننا سنحتاج على الأقل إلى تغيير إعلان الوظيفة:

بالطبع ، يلزم إجراء تغييرات إضافية ، في الوقت الحالي إذا كان المتغير الذي تم تمريره يحتوي في الواقع على قيمة std :: complex ، فإن times_two سيعود بصمت - بدون أي من الآثار الجانبية المرغوبة وبدون أي خطأ. في هذه الحالة ، يكون الإصلاح واضحًا. ولكن في البرامج الأكثر تعقيدًا ، قد يستغرق الأمر وقتًا طويلاً لتحديد الخطأ وتحديد موقعه في المقام الأول.

وبالتالي ، يتطلب استخدام المتغير في العالم الحقيقي عادةً آلية وصول أكثر قوة من الحصول عليها. لهذا السبب ، يدعم المتغير وقت الترجمة المحدد زيارة عبر application_visitor. تتطلب الزيارة أن يتعامل المبرمج صراحة (أو يتجاهل) كل نوع محدد. يؤدي عدم القيام بذلك إلى حدوث خطأ في وقت الترجمة.

تتطلب زيارة البديل كائن زائر. يوضح ما يلي أحد عمليات التنفيذ هذه عند قيام الزائر بتنفيذ سلوك مماثل لـ times_two:

مع تنفيذ الزائر أعلاه ، يمكننا بعد ذلك تطبيقه على v ، كما هو موضح في ما يلي:

كما هو متوقع ، أصبح محتوى v الآن عبارة عن سلسلة std :: string تساوي "hello world! hello world!". (سنتخطى عملية التحقق هذه المرة.)

بالإضافة إلى القوة المحسّنة ، توفر الزيارة ميزة أخرى مهمة على الحصول: القدرة على كتابة زوار عام. على سبيل المثال ، سيقوم الزائر التالي "بمضاعفة" محتوى أي & # 160 متغير (بشرط الأنواع المحددة لكل مشغل دعم + =):

مرة أخرى ، application_visitor يضبط العجلات في الحركة:

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

مواضيع متقدمة

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

وحدات الماكرو المعالج المسبق

بينما تعمل قائمة المعلمات المتغيرة لقالب فئة المتغير على تبسيط الاستخدام إلى حد كبير لعمليات إنشاء مثيل محددة للقالب ، إلا أنها تعقد بشكل كبير استخدام عمليات إنشاء مثيل عامة. على سبيل المثال ، في حين أنه من الواضح على الفور كيف يمكن للمرء أن يكتب دالة تقبل متغيرًا معينًا ، مثل variant & ltint ، std :: string & gt ، فإنه من غير الواضح كيف يمكن للمرء كتابة دالة تقبل أي متغير معين.

نظرًا لعدم وجود دعم لقوائم معلمات القوالب المتغيرة الحقيقية في معيار C ++ 98 ، هناك حاجة إلى المعالج المسبق. بينما توفر مكتبة Preprocessor حلاً عامًا وقويًا ، فإن الحاجة إلى تكرار BOOST_VARIANT_LIMIT_TYPES تؤدي إلى تشويش التعليمات البرمجية البسيطة دون داع. لذلك ، بالنسبة لحالات الاستخدام الشائعة ، توفر هذه المكتبة الماكرو الخاص بها BOOST_VARIANT_ENUM_PARAMS .

يبسط هذا الماكرو للمستخدم عملية إعلان أنواع المتغيرات في قوالب الوظائف أو التخصصات الجزئية الصريحة لقوالب الفئات ، كما هو موضح في ما يلي:

استخدام تسلسل نوع لتحديد أنواع محددة

في حين أنها مناسبة للاستخدامات النموذجية ، فإن قائمة معلمات القالب المتغير لقالب فئة المتغير محدودة في بعدين مهمين. أولاً ، نظرًا لعدم وجود دعم لقوائم معلمات القوالب المتغيرة الحقيقية في C ++ ، يجب أن يقتصر عدد المعلمات على حد أقصى محدد للتنفيذ (أي BOOST_VARIANT_LIMIT_TYPES). ثانيًا ، تجعل طبيعة قوائم المعلمات بشكل عام معالجة القوائم في وقت الترجمة أمرًا صعبًا للغاية.

لحل هذه المشاكل ، make_variant_over & lt تسلسل & gt يعرض متغيرًا أنواعه المحددة هي عناصر التسلسل (حيث يكون التسلسل هو أي نوع يلبي متطلبات MPL تسلسل مفهوم). على سبيل المثال،

قابلية التنقل : لسوء الحظ ، نظرًا لقضايا المطابقة القياسية في العديد من المجمعين ، فإن make_variant_over غير متاح عالميًا. On these compilers the library indicates its lack of support for the syntax via the definition of the preprocessor symbol BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT .

Recursive variant types

Recursive types facilitate the construction of complex semantics from simple syntax. For instance, nearly every programmer is familiar with the canonical definition of a linked list implementation, whose simple definition allows sequences of unlimited length:

The nature of variant as a generic class template unfortunately precludes the straightforward construction of recursive variant types. Consider the following attempt to construct a structure for simple mathematical expressions:

While well-intentioned, the above approach will not compile because binary_op is still incomplete when the variant type expression is instantiated. Further, the approach suffers from a more significant logical flaw: even if C++ syntax were different such that the above example could be made to "work," expression would need to be of infinite size, which is clearly impossible.

To overcome these difficulties, variant includes special support for the boost::recursive_wrapper class template, which breaks the circular dependency at the heart of these problems. Further, boost::make_recursive_variant provides a more convenient syntax for declaring recursive variant types. Tutorials for use of these facilities is described in the section called “Recursive types with recursive_wrapper ” and the section called “Recursive types with make_recursive_variant ”.

Recursive types with recursive_wrapper

The following example demonstrates how recursive_wrapper could be used to solve the problem presented in the section called “Recursive variant types”:

Because variant provides special support for recursive_wrapper , clients may treat the resultant variant as though the wrapper were not present. This is seen in the implementation of the following visitor, which calculates the value of an expression without any reference to recursive_wrapper :

Finally, we can demonstrate expression in action:

أداء : boost::recursive_wrapper has no empty state, which makes its move constructor not very optimal. Consider using std::unique_ptr or some other safe pointer for better performance on C++11 compatible compilers.

Recursive types with make_recursive_variant

For some applications of recursive variant types, a user may be able to sacrifice the full flexibility of using recursive_wrapper with variant for the following convenient syntax:

Use of the resultant variant type is as expected:

To be clear, one might represent the resultant content of var as ( 1 ( 3 5 ) 7 ) .

Finally, note that a type sequence can be used to specify the bounded types of a recursive variant via the use of boost::make_recursive_variant_over , whose semantics are the same as make_variant_over (which is described in the section called “Using a type sequence to specify bounded types”).

Portability : Unfortunately, due to standard conformance issues in several compilers, make_recursive_variant is not universally supported. On these compilers the library indicates its lack of support via the definition of the preprocessor symbol BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT . Thus, unless working with highly-conformant compilers, maximum portability will be achieved by instead using recursive_wrapper , as described in the section called “Recursive types with recursive_wrapper ”.

Binary visitation

As the tutorial above demonstrates, visitation is a powerful mechanism for manipulating variant content. Binary visitation further extends the power and flexibility of visitation by allowing simultaneous visitation of the content of two different variant objects.

Notably this feature requires that binary visitors are incompatible with the visitor objects discussed in the tutorial above, as they must operate on two arguments. The following demonstrates the implementation of a binary visitor:

As expected, the visitor is applied to two variant arguments by means of apply_visitor :

Finally, we must note that the function object returned from the "delayed" form of apply_visitor also supports binary visitation, as the following demonstrates:

Multi visitation

Multi visitation extends the power and flexibility of visitation by allowing simultaneous visitation of the content of three and more different variant objects. Note that header for multi visitors shall be included separately.

Notably this feature requires that multi visitors are incompatible with the visitor objects discussed in the tutorial above, as they must operate on same amout of arguments that was passed to apply_visitor . The following demonstrates the implementation of a multi visitor for three parameters:

As expected, the visitor is applied to three variant arguments by means of apply_visitor :

Finally, we must note that multi visitation does not support "delayed" form of apply_visitor .


شاهد الفيديو: Rekursion einfach erklärt - Funktionen in Java 5 Gehe auf u0026 werde #EinserSchüler (شهر اكتوبر 2021).