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

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();
}
}
اکنون که با مفهوم بازگشت مستقیم و غیرمستقیم آشنا شدید ، در جلسه بعدی بررسی می کنیم که چه زمانی باید از بازگشت استفاده کنیم.