جاوا

جلسه ۵۰: بازگشت مستقیم و بازگشت غیرمستقیم در جاوا

class ExampleClass {

  private static void f() {  
    // some code...
    g();
    //some code...
  }

  private static void g() {
    // some code...
    h();
   //some code...
  }

  private static void h() {  
    // some code...
    f();
    //some code...
  }

  public static void main(String args[] ) {

    // Method called here

  }

}
قطعه کد زیر یک نمونه پیاده سازی است که ۲۰ عدد صحیح را به روش بازگشتی غیر مستقیم چاپ می کند:
class ExampleClass {

    static int n = 0;
    public static void indirectRecursiveFunction1() {
        if (n <= 20) {
            System.out.print(n + " ");
            n++;
            indirectRecursiveFunction2();
        }
        else {
            return;
        }
    }

    public static void indirectRecursiveFunction2() {
        if (n <= 20) {
            System.out.print(n + " ");
            n++;
            indirectRecursiveFunction1();
        }
        else {
            return;
        }
    }

    public static void main( String args[] ) {
        indirectRecursiveFunction1();
    }
}
اکنون که با مفهوم بازگشت مستقیم و غیرمستقیم آشنا شدید ، در جلسه بعدی بررسی می کنیم که چه زمانی باید از بازگشت استفاده کنیم.
class Square {

    // Recursive method to calculate square of a number
    private static int square(int n) {

        // Base case
        if (n == 0) {
            return 0;
        }

        // Recursive case
        else {
            return square(n-1) + (2 * n) - 1;
        }
    }
    public static void main( String args[] ) {
        int input = 6;
        int output = square(input);
        System.out.println("The square of the number " + input + " is: " + output);
    }
}
اکنون به طور خلاصه در مورد دو قسمت اصلی یک متد بازگشتی یعنی حالت پایه و حالت بازگشتی ، که در کد بالا پیاده سازی شده است ، بحث خواهیم کرد.

حالت پایه

ما حالت پایه را در خط ۵ تعریف کردیم جایی که بیان می کند وقتی متغیر n برابر با ۰ باشد ، متد باید خاتمه یابد و شروع به برداشتن آیتم ها از بالای پشته بکند.

حالت بازگشتی

بیایید نگاهی به عملیات ریاضی لازم برای به توان ۲ رساندن n بیندازیم. ما باید مقدار n را به گونه ای کاهش دهیم که بتوانیم از آن برای فراخوانی همان متد استفاده کنیم اما فرمول ریاضی را تغییر ندهیم. ما به این می رسیم:

(n - 1)2 = n2 - 2n + 1

طبق قوانین ریاضی با جابجا کردن جمله های دو طرف تساوی به عبارت زیر می رسیم:

n2 = (n - 1)2 + 2n - 1

  به این ترتیب ما فرمولی بازگشتی برای محاسبه مربع یک عدد بدست آوردیم.

بازگشت غیرمستقیم

بازگشت غیرمستقیم (یا بازگشت متقابل) زمانی اتفاق می افتد که متدی ، متد دیگری را فراخوانی می کند و در نهایت منجر به فراخوانی مجدد متد اولی می شود. به عنوان مثال ، اگر متد ()f متد ()g را فراخوانی کند ، سپس ()g متد ()h و در نهایت متد ()h متد اولیه یعنی ()f را فراخوانی کند. این پدیده منجر به بازگشت غیرمستقیم (یا بازگشت متقابل) می شود.
class ExampleClass {

  private static void f() {  
    // some code...
    g();
    //some code...
  }

  private static void g() {
    // some code...
    h();
   //some code...
  }

  private static void h() {  
    // some code...
    f();
    //some code...
  }

  public static void main(String args[] ) {

    // Method called here

  }

}
قطعه کد زیر یک نمونه پیاده سازی است که ۲۰ عدد صحیح را به روش بازگشتی غیر مستقیم چاپ می کند:
class ExampleClass {

    static int n = 0;
    public static void indirectRecursiveFunction1() {
        if (n <= 20) {
            System.out.print(n + " ");
            n++;
            indirectRecursiveFunction2();
        }
        else {
            return;
        }
    }

    public static void indirectRecursiveFunction2() {
        if (n <= 20) {
            System.out.print(n + " ");
            n++;
            indirectRecursiveFunction1();
        }
        else {
            return;
        }
    }

    public static void main( String args[] ) {
        indirectRecursiveFunction1();
    }
}
اکنون که با مفهوم بازگشت مستقیم و غیرمستقیم آشنا شدید ، در جلسه بعدی بررسی می کنیم که چه زمانی باید از بازگشت استفاده کنیم.
class ExampleClass {

  private static void f() {
    
    // some code...

    f();

    //some code...

  }

  public static void main(String args[] ) {

    // Method called here

  }

}
قطعه کد زیر مثالی از روش بازگشتی مستقیم است که مربع یک عدد را محاسبه می کند.
class Square {

    // Recursive method to calculate square of a number
    private static int square(int n) {

        // Base case
        if (n == 0) {
            return 0;
        }

        // Recursive case
        else {
            return square(n-1) + (2 * n) - 1;
        }
    }
    public static void main( String args[] ) {
        int input = 6;
        int output = square(input);
        System.out.println("The square of the number " + input + " is: " + output);
    }
}
اکنون به طور خلاصه در مورد دو قسمت اصلی یک متد بازگشتی یعنی حالت پایه و حالت بازگشتی ، که در کد بالا پیاده سازی شده است ، بحث خواهیم کرد.

حالت پایه

ما حالت پایه را در خط ۵ تعریف کردیم جایی که بیان می کند وقتی متغیر n برابر با ۰ باشد ، متد باید خاتمه یابد و شروع به برداشتن آیتم ها از بالای پشته بکند.

حالت بازگشتی

بیایید نگاهی به عملیات ریاضی لازم برای به توان ۲ رساندن n بیندازیم. ما باید مقدار n را به گونه ای کاهش دهیم که بتوانیم از آن برای فراخوانی همان متد استفاده کنیم اما فرمول ریاضی را تغییر ندهیم. ما به این می رسیم:

(n - 1)2 = n2 - 2n + 1

طبق قوانین ریاضی با جابجا کردن جمله های دو طرف تساوی به عبارت زیر می رسیم:

n2 = (n - 1)2 + 2n - 1

  به این ترتیب ما فرمولی بازگشتی برای محاسبه مربع یک عدد بدست آوردیم.

بازگشت غیرمستقیم

بازگشت غیرمستقیم (یا بازگشت متقابل) زمانی اتفاق می افتد که متدی ، متد دیگری را فراخوانی می کند و در نهایت منجر به فراخوانی مجدد متد اولی می شود. به عنوان مثال ، اگر متد ()f متد ()g را فراخوانی کند ، سپس ()g متد ()h و در نهایت متد ()h متد اولیه یعنی ()f را فراخوانی کند. این پدیده منجر به بازگشت غیرمستقیم (یا بازگشت متقابل) می شود.
class ExampleClass {

  private static void f() {  
    // some code...
    g();
    //some code...
  }

  private static void g() {
    // some code...
    h();
   //some code...
  }

  private static void h() {  
    // some code...
    f();
    //some code...
  }

  public static void main(String args[] ) {

    // Method called here

  }

}
قطعه کد زیر یک نمونه پیاده سازی است که ۲۰ عدد صحیح را به روش بازگشتی غیر مستقیم چاپ می کند:
class ExampleClass {

    static int n = 0;
    public static void indirectRecursiveFunction1() {
        if (n <= 20) {
            System.out.print(n + " ");
            n++;
            indirectRecursiveFunction2();
        }
        else {
            return;
        }
    }

    public static void indirectRecursiveFunction2() {
        if (n <= 20) {
            System.out.print(n + " ");
            n++;
            indirectRecursiveFunction1();
        }
        else {
            return;
        }
    }

    public static void main( String args[] ) {
        indirectRecursiveFunction1();
    }
}
اکنون که با مفهوم بازگشت مستقیم و غیرمستقیم آشنا شدید ، در جلسه بعدی بررسی می کنیم که چه زمانی باید از بازگشت استفاده کنیم.این جلسه دو نوع مختلف بازگشت را توضیح می دهد: بازگشت مستقیم و غیرمستقیم. موارد زیر را بیان خواهیم کرد:
    • بازگشت مستقیم
      • حالت پایه
      • حالت بازگشتی
  • بازگشت غیرمستقیم
 

بازگشت مستقیم

بازگشت مستقیم زمانی اتفاق می افتد که متدی خود را فراخوانی کند. این منجر به فراخوانی بازگشتی یک مرحله ای می شود: متد فراخوانی بازگشتی را در داخل بدنه خود انجام می دهد.
class ExampleClass {

  private static void f() {
    
    // some code...

    f();

    //some code...

  }

  public static void main(String args[] ) {

    // Method called here

  }

}
قطعه کد زیر مثالی از روش بازگشتی مستقیم است که مربع یک عدد را محاسبه می کند.
class Square {

    // Recursive method to calculate square of a number
    private static int square(int n) {

        // Base case
        if (n == 0) {
            return 0;
        }

        // Recursive case
        else {
            return square(n-1) + (2 * n) - 1;
        }
    }
    public static void main( String args[] ) {
        int input = 6;
        int output = square(input);
        System.out.println("The square of the number " + input + " is: " + output);
    }
}
اکنون به طور خلاصه در مورد دو قسمت اصلی یک متد بازگشتی یعنی حالت پایه و حالت بازگشتی ، که در کد بالا پیاده سازی شده است ، بحث خواهیم کرد.

حالت پایه

ما حالت پایه را در خط ۵ تعریف کردیم جایی که بیان می کند وقتی متغیر n برابر با ۰ باشد ، متد باید خاتمه یابد و شروع به برداشتن آیتم ها از بالای پشته بکند.

حالت بازگشتی

بیایید نگاهی به عملیات ریاضی لازم برای به توان ۲ رساندن n بیندازیم. ما باید مقدار n را به گونه ای کاهش دهیم که بتوانیم از آن برای فراخوانی همان متد استفاده کنیم اما فرمول ریاضی را تغییر ندهیم. ما به این می رسیم:

(n - 1)2 = n2 - 2n + 1

طبق قوانین ریاضی با جابجا کردن جمله های دو طرف تساوی به عبارت زیر می رسیم:

n2 = (n - 1)2 + 2n - 1

  به این ترتیب ما فرمولی بازگشتی برای محاسبه مربع یک عدد بدست آوردیم.

بازگشت غیرمستقیم

بازگشت غیرمستقیم (یا بازگشت متقابل) زمانی اتفاق می افتد که متدی ، متد دیگری را فراخوانی می کند و در نهایت منجر به فراخوانی مجدد متد اولی می شود. به عنوان مثال ، اگر متد ()f متد ()g را فراخوانی کند ، سپس ()g متد ()h و در نهایت متد ()h متد اولیه یعنی ()f را فراخوانی کند. این پدیده منجر به بازگشت غیرمستقیم (یا بازگشت متقابل) می شود.
class ExampleClass {

  private static void f() {  
    // some code...
    g();
    //some code...
  }

  private static void g() {
    // some code...
    h();
   //some code...
  }

  private static void h() {  
    // some code...
    f();
    //some code...
  }

  public static void main(String args[] ) {

    // Method called here

  }

}
قطعه کد زیر یک نمونه پیاده سازی است که ۲۰ عدد صحیح را به روش بازگشتی غیر مستقیم چاپ می کند:
class ExampleClass {

    static int n = 0;
    public static void indirectRecursiveFunction1() {
        if (n <= 20) {
            System.out.print(n + " ");
            n++;
            indirectRecursiveFunction2();
        }
        else {
            return;
        }
    }

    public static void indirectRecursiveFunction2() {
        if (n <= 20) {
            System.out.print(n + " ");
            n++;
            indirectRecursiveFunction1();
        }
        else {
            return;
        }
    }

    public static void main( String args[] ) {
        indirectRecursiveFunction1();
    }
}
اکنون که با مفهوم بازگشت مستقیم و غیرمستقیم آشنا شدید ، در جلسه بعدی بررسی می کنیم که چه زمانی باید از بازگشت استفاده کنیم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا