تكنولوجيا

أمثلة على Recursion .. ” الاستدعاء الذاتي في هياكل البيانات “

ماهي تقنية الاستدعاء الذاتي Recursion

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

أمثلة على Recursion

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

أمثلة على الطريقة المباشرة بلغة++C

#include <bits/stdc++.h>
using namespace std;
// Assuming n-th disk is bottom disk (count down)
void tower(int n, char sourcePole,
char destinationPole, char auxiliaryPole)
{
// Base case (termination condition)
if(0 == n)
return;
// Move first n-1 disks from source pole
// to auxiliary pole using destination as
// temporary pole
tower(n - 1, sourcePole, auxiliaryPole,
destinationPole);
// Move the remaining disk from source
// pole to destination pole
cout << "Move the disk "<< n << " from " <<
sourcePole <<" to "<< destinationPole << endl;
// Move the n-1 disks from auxiliary (now source)
// pole to destination pole using source pole as
// temporary (auxiliary) pole
tower(n - 1, auxiliaryPole, destinationPole,
sourcePole);
}
// Driver code
int main()
{
tower(3, "S", "D", "A");
return 0;
}
// This code is contributed by SHUBHAMSINGH10

أمثلة على الطريقة المباشرة بلغة الجافا

// Assuming n-th disk is
// bottom disk (count down)
class GFG {
    
static void tower(int n, char sourcePole,
                  char destinationPole, char auxiliaryPole)
{
    // Base case (termination condition)
    if (0 == n)
    return;
    // Move first n-1 disks from source pole
    // to auxiliary pole using destination as
    // temporary pole
    tower(n - 1, sourcePole, auxiliaryPole,
                          destinationPole);
    // Move the remaining disk from source
    // pole to destination pole
    System.out.printf("Move the disk %d from %c to %cn",
                         n, sourcePole, destinationPole);
    // Move the n-1 disks from auxiliary (now source)
    // pole to destination pole using source pole as
    // temporary (auxiliary) pole
    tower(n - 1, auxiliaryPole, destinationPole, sourcePole);
}
public static void main(String[] args)
{
    tower(3, "S", "D", "A");
}
}
// This code is contributed by Smitha Dinesh Semwal.
أمثلة على البرمجة المباشرة باستخدام لغة بايثون 3
# Assuming n-th disk is
# bottom disk (count down)
def tower(n, sourcePole, destinationPole, auxiliaryPole):
    # Base case (termination condition)
    if(0 == n):
        return
    
    # Move first n-1 disks
    # from source pole
    # to auxiliary pole
    # using destination as
    # temporary pole
    tower(n-1, sourcePole, auxiliaryPole, destinationPole)
    
    # Move the remaining
    # disk from source
    # pole to destination pole
    print("Move the disk",sourcePole,"from",sourcePole,"to",destinationPole)
    
    # Move the n-1 disks from
    # auxiliary (now source)
    # pole to destination pole
    # using source pole as
    # temporary (auxiliary) pole
    tower(n-1, auxiliaryPole, destinationPole,sourcePole)
# Driver code
tower(3, "S", "D", "A")
ومن الأمثلة على الاستدعاء الذاتي طباعة الأعداد:
الأرقام من الرقم س حتى الرقم 1 بشكل تنازلي، ويكون البرنامج على النحو التالي
public void printInt(int i){
if(i == 1){
;System.out.println(1)
}else{
;System.out.println(i)
;printInt(i1)
{{
في حالة طباعة الأرقام بترتيب تصاعدي فقط، يجب عكس آخر سطرين من الكود لتحقيق الطباعة بالترتيب المطلوب كما يلي:
{public void printInt(int i)
}if(i == 1)
;System.out.println(1)
}else{
;printInt(i1)
; System.out.println(i)
 {{
ومن الأمثلة على الاستدعاء الذاتي المجموع للعدد س:
يجب استدعاء method متكررًا في هذا النوع من الفنون البرمجية، حيث يتم جمع الأعداد من الصفر وحتى س، وسيتم كتابة البرنامج بالطريقة التالية:
}public int SUM(int i)
}if(i == 0)
;return 0
 } else{
;return i + SUM(i 1)
{ {

الاستدعاء الذاتي بلغة c

الوظيفة التي تستدعي فيها الوظيفة نفسها تسمى بالوظيفة العودية، وتسمى الوظيفة المقابلة، وفي لغة ++C، فإن الوظيفة العودية يمكن فهمها بشكل أفضل من خلال دالة المشغل، التي يتجلى وجودها في:

 f (n) = n * f (n-1) ، الشرط الأساسي: إذا كان n ≤ 1 ، فإن f(n) = 1.

تستخدم العودية لتقسيم المشكلة إلى مشاكل أصغر حتى تتمكن من الوصول إلى الحالة الأساسية، ويتم ذلك من خلال استخدام دالة عاملية f(n).

أنواع تقنية الاستدعاء الذاتي

تتكون تقنية الاستدعاء الذاتي من نوعين، حيث يتم استدعاء الوظيفة من داخل نفسها أو استدعاء عدة وظائف، ويتميز نوعا تقنية الاستدعاء الذاتي بالآتي:

-الاستدعاء الذاتي المباشر

وتصنف إلى أربعة أنواع وتتجلى في:

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

-الاستدعاء الذاتي الغير مباشر

في الاستدعاء الذاتي غير المباشر، يتم ربط دوال مختلفة ببعضها البعض بشكل دائري، وذلك يعني استدعاء وظيفة معينة بشكلغير مباشر من وظيفة أخرى.

مزايا وخصائص الاستدعاء الذاتي

إن خصائص الاستدعاء الذاتي تتجلى في:

  • الوظيفة التكرارية أو الاستدعاء الذاتي هي وظيفة تقوم بإستدعاء نفسها.
  • تكون سرعة الاستجابة الذاتية أبطأ بسبب الأعباء المتراكمة.
  • يجب أن تتضمن وظيفة الاستدعاء الذاتي شروطًا للانتهاء أو حالة أساسية، بالإضافة إلى تضمين تعبيرات متكررة.

بينما مزايا الاستدعاء الذاتي تتجلى في:

  • إنه يجعل البرنامج نظيفاً.
  • يساعد على تبسيط التعليمات البرمجية المعقدة والمتداخلة.

بينما مساوئ الاستدعاء الذاتي تتجلى في :

  • من الصعب أن يتم تصحيح الأخطاء.
  • من الصعب أن يتم فهم المنطق.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى