Module: (جافا) الروتينات الفرعية. العودية.


Problem

5/10

العودية والتكرار

Theory Click to read/hide

لفهم العودية ، تحتاج إلى فهم العودية ...
نبسب ؛
التكرار & nbsp؛ في البرمجة & mdash؛ بمعنى واسع و [مدش] ؛ تنظيم معالجة البيانات ، حيث يتم تكرار الإجراءات عدة مرات ، دون أن يؤدي ذلك إلى مكالمات إلى أنفسهم (على عكس & nbsp ؛٪ BA٪ D1٪ 83٪ D1٪ 80٪ D1٪ 81٪ D0٪ B8٪ D1٪ 8F "title =" Recursion " > العود ). بالمعنى الضيق و [مدش]. عملية معالجة البيانات الدورية بخطوة واحدة. & nbsp؛
غالبًا ما تستخدم الخوارزميات التكرارية في الخطوة الحالية (التكرار) نتيجة نفس العملية أو الإجراء المحسوب في الخطوات السابقة. & nbsp ؛ أحد الأمثلة على هذه الحسابات هو حساب علاقات التكرار. & nbsp ؛
مثال بسيط على القيمة العودية هو العامل: \ (N! = 1 \ cdot 2 \ cdot 3 \ cdot \ ... \ \ cdot N \) حساب القيمة في كل خطوة (التكرار) هو \ (N = N \ cdot i \) . & nbsp؛ عند حساب قيمة \ (N \) ، نأخذ القيمة المخزنة بالفعل & nbsp؛ \ (N \) . <ر ​​/>
يمكن أيضًا وصف مضروب الرقم باستخدام الصيغة المتكررة :



قد تلاحظ أن هذا الوصف ليس أكثر من وظيفة تكرارية.
هنا السطر الأول ( \ (n & lt؛ = 1 \) ) & mdash؛ هذه هي الحالة الأساسية (حالة نهاية العودية) والسطر الثاني هو الانتقال إلى الخطوة التالية. & nbsp ؛
نبسب ؛ <الجسم>
ستبدو وظيفة العوامل العودية على هذا النحو قارن الخوارزمية لإيجاد العامل بالطريقة المعتادة غير العودية
int Factorial (int n) { إذا (n & gt؛ 1) عودة ن * عاملي (ن - 1) ؛ آخر يعود 1 ؛ } س = 1 ؛ لـ (i = 2 ؛ i & lt ؛ = n ؛ i ++) س = س * ط ؛ printf (& quot؛٪ d & quot؛، x)؛

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

Problem

على & nbsp؛ تحديد دالة & nbsp؛ K (n) تُرجع عدد الأرقام في عدد طبيعي معين & nbsp؛ n: & nbsp؛


اكتب دالة تعاودية لحساب عدد الأرقام في عدد طبيعي n.