الگوریتم بازگشتی چیست؟ – به زبان ساده + مثال و تمرین

۲۳۰۹ بازدید
آخرین به‌روزرسانی: ۰۵ تیر ۱۴۰۲
زمان مطالعه: ۱۱ دقیقه
الگوریتم بازگشتی چیست؟ – به زبان ساده + مثال و تمرین

سافرادی که علاقه‌مند به برنامه نویسی هستند، در هنگام یادگیری ساختمان داده و طراحی الگوریتم، با مفهوم مهمی به نام «الگوریتم بازگشتی» (Recursive Algorithm) آشنا می‌شوند. این روش برنامه نویسی به شما کمک می‌کند تا برخی مسائل را به‌طور بهینه‌تر و ساده‌تر پیاده‌سازی کنید. در این مطلب از مجله فرادرس قصد داریم به این پرسش پاسخ دهیم که الگوریتم بازگشتی چیست و چه ویژگی‌هایی دارد. همچنین، به منظور درک بهتر این مفهوم، مثال‌های ساده و کاربردی برای آن ارائه شده است.

فهرست مطالب این نوشته

الگوریتم بازگشتی چیست ؟

در الگوریتم بازگشتی، تابعی وجود دارد که به‌طور مستقیم یا غیر مستقیم خودش را تا زمانی فراخوانی می‌کند که شرط توقف تکرار فراخوانی اتفاق نیفتد. الگوریتم بازگشتی در حل مسائلی استفاده می‌شود که بتوان مسئله را به بخش‌های کوچکتری تقسیم کرد و هر یک از این بخش‌های کوچکتر، با تابع اصلی تعریف شده برای مسئله قابل حل باشند. به عبارتی، در طی فرآیند الگوریتم بازگشتی، خروجی‌های بخش‌های کوچکتر مسئله محاسبه و سپس مسئله اصلی، با استفاده از خروجی‌های حاصل شده حل می‌شود.

کاربرد الگوریتم بازگشتی چیست ؟

با استفاده از الگوریتم بازگشتی می‌توان از قطعه کدهای کمتری برای حل مسائل استفاده کرد. به این ترتیب، نوشتن برنامه ساده‌تر انجام می‌شود. این ویژگی به خوانایی برنامه نیز کمک بسزایی می‌کند. همچنین، این الگوریتم برای حل مسائلی مناسب است که روال حل بخش‌های کوچکتر مسئله، همانند مسئله اصلی باشد. محاسبه فاکتوریل و محاسبه n-امین عدد فیبوناچی به عنوان مسائلی محسوب می‌شوند که می‌توان آن‌ها را به‌راحتی با الگوریتم بازگشتی پیاده‌سازی کرد.

ساختار الگوریتم بازگشتی چیست ؟

به منظور پیاده‌سازی الگوریتم بازگشتی، در ابتدا باید مسئله را به ۲ بخش تقسیم کنیم که در ادامه به آن‌ها اشاره شده است:

  • وضعیت نهایی: وضعیت نهایی الگوریتم بازگشتی باعث متوقف شدن اجرای الگوریتم می‌شود. چنانچه شرایطی را برای وضعیت نهایی الگوریتم مشخص نکنیم، الگوریتم بازگشتی به دفعات نامتناهی اجرا می‌شود.
  • مرحله تکرار: این بخش از الگوریتم بازگشتی باعث فراخوانی مجدد تابع بازگشتی می‌شود و این روند تکرار آنقدر ادامه پیدا می‌کند که به وضعیت نهایی برسیم و الگوریتم متوقف شود. با هر بار فراخوانی تابع بازگشتی، به وضعیت نهایی نزدیک می‌شویم.
ساختار الگوریتم بازگشتی چیست

در بخش‌های بعدی مطلب، مثال‌هایی از الگوریتم بازگشتی ارائه شده است که به درک مفاهیم این بخش کمک می‌کنند.

مثال فیبوناچی با الگوریتم بازگشتی

یکی از مثال‌هایی که می‌توانیم برای الگوریتم بازگشتی ارائه کنیم، دنباله فیبوناچی است. در مسئله فیبوناچی به دنبال یافتن مقدار عددی موقعیت n-ام از یک سری اعداد هستیم. سری اعداد فیبوناچی با ۲ عدد ۰ و ۱ شروع می‌شوند و به منظور یافتن مقدار عددی n-ام از این سری، باید n-1 عدد قبلی را با یکدیگر جمع کنیم.

برای حل این مسئله می‌توان ۲ بخش از ساختار الگوریتم بازگشتی را به این نحو تعریف کرد:

  • وضعیت نهایی: اگر n برابر با عدد ۱ باشد، تابع فیبوناچی باید مقدار ۰ را برگرداند، زیرا اولین عدد از سری فیبوناچی برابر با ۰ است. چنانچه مقدار n برابر با عدد ۲ باشد، تابع فیبوناچی باید مقدار ۱ را در خروجی ارائه دهد، زیرا دومین عدد از سری فیبوناچی برابر با عدد ۱ است.
  • مرحله تکرار: چنانچه مقدار n برابر با هر عددی به جز اعداد ۰ و ۱ باشد، با استفاده از دستور fibonacci(n-1) + fibonacci(n-2)  می‌توان مقدار عددی سری فیبوناجی را در موقعیت n-ام مشخص کرد.
حل مسئله فیبوناچی با استفاده از روش بازگشتی

در ادامه، به نحوه پیاده‌سازی مسئله فیبوناچی با چند زبان برنامه نویسی خواهیم پرداخت.

پیاده سازی مسئله فیبوناچی با الگوریتم بازگشتی در زبان پایتون

در قطعه کد زیر، نحوه پیاده‌سازی مسئله فیبوناچی را با استفاده از الگوریتم بازگشتی در زبان برنامه نویسی پایتون ملاحظه می‌کنید.

1def fibonacci(n):
2# Python code to implement Fibonacci series
3 
4# Function for fibonacci
5def fib(n):
6 
7    # Stop condition
8    if (n == 0):
9        return 0
10 
11    # Stop condition
12    if (n == 1 or n == 2):
13        return 1
14 
15    # Recursion function
16    else:
17        return (fib(n - 1) + fib(n - 2))
18
19# Driver Code
20 
21# Initialize variable n.
22n = 5;
23print("Fibonacci series of 5 numbers is :",end=" ")
24 
25# for loop to print the fibonacci series.
26for i in range(0,n):
27    print(fib(i),end=" ")
28

خروجی قطعه کد بالا در ادامه ملاحظه می‌شود.

Fibonacci series of 5 numbers is: 0 1 1 2 3 

پیاده سازی مسئله فیبوناچی با الگوریتم بازگشتی در زبان C++‎

در قطعه کد زیر، نحوه پیاده‌سازی مسئله فیبوناچی را با استفاده از الگوریتم بازگشتی در زبان برنامه نویسی C++‎ ملاحظه می‌کنید.

1// C++ code to implement Fibonacci series
2#include <bits/stdc++.h>
3using namespace std;
4 
5// Function for fibonacci
6 
7int fib(int n)
8{
9    // Stop condition
10    if (n == 0)
11        return 0;
12 
13    // Stop condition
14    if (n == 1 || n == 2)
15        return 1;
16 
17    // Recursion function
18    else
19        return (fib(n - 1) + fib(n - 2));
20}
21 
22// Driver Code
23int main()
24{
25    // Initialize variable n.
26    int n = 5;
27    cout<<"Fibonacci series of 5 numbers is: ";
28 
29    // for loop to print the fibonacci series.
30    for (int i = 0; i < n; i++)
31    {
32        cout<<fib(i)<<" ";
33    }
34    return 0;
35}

خروجی حاصل شده از قطعه کد بالا در ادامه ارائه شده است.

Fibonacci series of 5 numbers is: 0 1 1 2 3 

پیاده سازی مسئله فیبوناچی با الگوریتم بازگشتی در زبان C

کد زیر، نحوه پیاده‌سازی مسئله فیبوناچی را با استفاده از الگوریتم بازگشتی در زبان برنامه نویسی C نشان می‌دهد.

1// C code to implement Fibonacci series
2#include <stdio.h>
3 
4// Function for fibonacci
5int fib(int n)
6{
7    // Stop condition
8    if (n == 0)
9        return 0;
10 
11    // Stop condition
12    if (n == 1 || n == 2)
13        return 1;
14 
15    // Recursion function
16    else
17        return (fib(n - 1) + fib(n - 2));
18}
19 
20// Driver Code
21int main()
22{
23    // Initialize variable n.
24    int n = 5;
25    printf("Fibonacci series "
26           "of %d numbers is: ",
27           n);
28 
29    // for loop to print the fibonacci series.
30    for (int i = 0; i < n; i++) {
31        printf("%d ", fib(i));
32    }
33    return 0;
34}

خروجی قطعه کد بالا در ادامه آمده است.

Fibonacci series of 5 numbers is: 0 1 1 2 3 

پیاده سازی مسئله فیبوناچی با الگوریتم بازگشتی در زبان جاوا

کد زیر، نحوه پیاده‌سازی مسئله فیبوناچی را با استفاده از الگوریتم بازگشتی در زبان برنامه نویسی جاوا را نشان می‌دهد.

1// Java code to implement Fibonacci series
2import java.util.*;
3 
4class GFG
5{
6 
7// Function for fibonacci
8static int fib(int n)
9{
10    // Stop condition
11    if (n == 0)
12        return 0;
13 
14    // Stop condition
15    if (n == 1 || n == 2)
16        return 1;
17 
18    // Recursion function
19    else
20        return (fib(n - 1) + fib(n - 2));
21}
22 
23// Driver Code
24public static void main(String []args)
25{
26   
27    // Initialize variable n.
28    int n = 5;
29    System.out.print("Fibonacci series of 5 numbers is: ");
30 
31    // for loop to print the fibonacci series.
32    for (int i = 0; i < n; i++)
33    {
34        System.out.print(fib(i)+" ");
35    }
36}
37}
38 
39// This code is contributed by rutvik_56.

خروجی قطعه کد بالا در ادامه ارائه شده است..

Fibonacci series of 5 numbers is: 0 1 1 2 3 

پیاده سازی مسئله فیبوناچی با الگوریتم بازگشتی در سی شارپ

در قطعه کد زیر، نحوه پیاده‌سازی مسئله فیبوناچی را با استفاده از الگوریتم بازگشتی در زبان برنامه نویسی C#‌‎ ملاحظه می‌کنید.

1using System;
2 
3public class GFG
4{
5 
6  // Function for fibonacci
7  static int fib(int n)
8  {
9 
10    // Stop condition
11    if (n == 0)
12      return 0;
13 
14    // Stop condition
15    if (n == 1 || n == 2)
16      return 1;
17 
18    // Recursion function
19    else
20      return (fib(n - 1) + fib(n - 2));
21  }
22 
23  // Driver Code
24  static public void Main ()
25  {
26 
27    // Initialize variable n.
28    int n = 5;
29    Console.Write("Fibonacci series of 5 numbers is: ");
30 
31    // for loop to print the fibonacci series.
32    for (int i = 0; i < n; i++)
33    {
34      Console.Write(fib(i) + " ");
35    }
36  }
37}
38 
39// This code is contributed by avanitrachhadiya2155

خروجی قطعه کد بالا در زیر ارائه شده است.

Fibonacci series of 5 numbers is: 0 1 1 2 3 

پیاده سازی مسئله فیبوناچی با الگوریتم بازگشتی در جاوا اسکریپت

قطعه کد زیر، نحوه پیاده‌سازی مسئله فیبوناچی را با استفاده از الگوریتم بازگشتی در زبان برنامه نویسی جاوا اسکریپت نشان می‌دهد.

1// JavaScript code to implement Fibonacci series
2 
3// Function for fibonacci
4function fib(n)
5{
6   // Stop condition
7   if(n == 0)
8     return 0;
9    
10   // Stop condition
11   if(n == 1 || n == 2)
12      return 1;
13   // Recursion function
14   else
15      return fib(n-1) + fib(n-2);
16}
17 
18// Initialize variable n.
19let n = 5;
20 
21document.write("Fibonacci series of 5 numbers is: ");
22 
23// for loop to print the fibonacci series.
24for(let i = 0; i < n; i++)
25{
26    document.write(fib(i) + " ");
27}

خروجی قطعه کد بالا در ادامه آمده است.

Fibonacci series of 5 numbers is: 0 1 1 2 3 

مثال فاکتوریل با استفاده از تابع بازگشتی

محاسبه فاکتوریل نیز از دیگر مسائلی است که می‌توان آن را با استفاده از الگوریتم بازگشتی پیاده‌سازی کرد. فاکتوریل عدد n از محاسبه حاصل ضرب اعداد ۱ تا n محاسبه می‌شود. فاکتوریل عدد ۰ برابر با ۱ است و برای اعداد منفی نیز مقدار فاکتوریل تعریف نمی‌شود.

برای پیاده‌سازی مسئله فاکتوریل با استفاده از الگوریتم بازگشتی می‌توان تابعی تعریف کرد که عدد n را به عنوان آرگومان دریافت می‌کند و در خروجی مقدار فاکتوریل را برمی‌گرداند. برای حل مسئله فاکتوریل نیز می‌توان ۲ بخش اصلی الگوریتم بازگشتی را به شکل زیر مشخص کرد:

  • وضعیت نهایی: اگر عدد n برابر با ۰ یا ۱ بود، عدد ۱ را به عنوان خروجی تابع فاکتوریل برمی‌گردانیم. چنانچه عدد n کوچکتر از ۰ باشد، تابع باید خطایی را در خروجی نشان دهد.
  • مرحله تکرار: با استفاده از دستور n * factorial(n-1)  می‌توان ضرب مقادیر ۱ تا n را محاسبه کرد.

در ادامه این مطلب از مجله فرادرس، به نحوه پیاده‌سازی مسئله فاکتوریل با استفاده از روش بازگشتی در چندین زبان برنامه نویسی می‌پردازیم.

پیاده سازی مسئله فاکتوریل با الگوریتم بازگشتی در پایتون

در قطعه کد زیر، نحوه پیاده‌سازی مسئله فاکتوریل با استفاده از الگوریتم بازگشتی با زبان پایتون ارائه شده است.

1def factorial(n):
2# Python3 code to implement factorial
3 
4# Factorial function
5def f(n):
6 
7    # Stop condition
8    if (n == 0 or n == 1):
9        return 1;
10 
11    # Recursive condition
12    else:
13        return n * f(n - 1);
14 
15 
16# Driver code
17if __name__=='__main__':
18 
19    n = 5;
20    print("factorial of",n,"is:",f(n))

خروجی قطعه کد بالا را در ادامه آمده است.

factorial of 5 is: 120

پیاده سازی مسئله فاکتوریل با الگوریتم بازگشتی در C++‎

در قطعه کد زیر، نحوه پیاده‌سازی مسئله فاکتوریل را با استفاده از الگوریتم بازگشتی در زبان برنامه نویسی C++‎ ملاحظه می‌کنید.

1// C++ code to implement factorial
2#include <bits/stdc++.h>
3using namespace std;
4 
5// Factorial function
6int f(int n)
7{
8    // Stop condition
9    if (n == 0 || n == 1)
10        return 1;
11 
12    // Recursive condition
13    else
14        return n * f(n - 1);
15}
16 
17// Driver code
18int main()
19{
20    int n = 5;
21    cout<<"factorial of "<<n<<" is: "<<f(n);
22    return 0;
23}

خروجی قطعه کد بالا را در ادامه مشاهده می‌کنید.

factorial of 5 is: 120

پیاده سازی مسئله فاکتوریل با روش بازگشتی در زبان C‎

قطعه کد زیر، نحوه پیاده‌سازی مسئله فاکتوریل را با استفاده از الگوریتم بازگشتی در زبان برنامه نویسی C‎ نشان می‌دهد.

1// C code to implement factorial
2#include <stdio.h>
3 
4// Factorial function
5int f(int n)
6{
7    // Stop condition
8    if (n == 0 || n == 1)
9        return 1;
10 
11    // Recursive condition
12    else
13        return n * f(n - 1);
14}
15 
16// Driver code
17int main()
18{
19    int n = 5;
20    printf("factorial of %d is: %d", n, f(n));
21    return 0;
22}

خروجی قطعه کد بالا در ادامه ملاحظه می‌شود.

factorial of 5 is: 120

پیاده سازی مسئله فاکتوریل با روش بازگشتی در جاوا

در ادامه، نحوه پیاده‌سازی مسئله فاکتوریل را با استفاده از الگوریتم بازگشتی در زبان برنامه نویسی جاوا‎ را ملاحظه می‌کنید.

1// Java code to implement factorial
2public class GFG
3{
4 
5  // Factorial function
6  static int f(int n)
7  {
8 
9    // Stop condition
10    if (n == 0 || n == 1)
11      return 1;
12 
13    // Recursive condition
14    else
15      return n * f(n - 1);
16  }
17 
18  // Driver code
19  public static void main(String[] args)
20  {
21    int n = 5;
22    System.out.println("factorial of " + n + " is: " + f(n));
23  }
24}

خروجی قطعه کد بالا در ادامه ارائه شده است.

factorial of 5 is: 120

پیاده سازی مسئله فاکتوریل با روش بازگشتی در سی شارپ

کد زیر، نحوه پیاده‌سازی مسئله فاکتوریل را با استفاده از الگوریتم بازگشتی در زبان برنامه نویسی C‎#‎ را نشان می‌دهد.

1// C# code to implement factorial
2using System;
3class GFG {
4 
5  // Factorial function
6  static int f(int n)
7  {
8    // Stop condition
9    if (n == 0 || n == 1)
10      return 1;
11 
12    // Recursive condition
13    else
14      return n * f(n - 1);
15  }
16 
17  // Driver code
18  static void Main()
19  {
20    int n = 5;
21    Console.WriteLine("factorial of " + n + " is: " + f(n));
22  }
23}
24 

خروجی حاصل شده از قطعه کد بالا را در زیر ملاحظه می‌کنید.

factorial of 5 is: 120

پیاده سازی مسئله فاکتوریل با تابع بازگشتی در جاوا اسکریپت‎

در قطعه کد زیر، نحوه پیاده‌سازی مسئله فاکتوریل با استفاده از الگوریتم بازگشتی در زبان برنامه نویسی جاوا اسکریپت ارائه شده است.

1// JavaScript code to implement factorial
2 
3// Factorial function
4function f(n)
5{
6   // Stop condition
7   if(n == 0 || n == 1)
8     return 1;
9      
10   // Recursive condition
11   else
12      return n*f(n-1);
13}
14 
15// Initialize variable n.
16let n = 5;
17document.write("factorial of "+ n +" is: " + f(n));

خروجی قطعه کد بالا را در زیر ملاحظه می‌کنید.

factorial of 5 is: 120

انواع بازگشت در الگوریتم بازگشتی

در الگوریتم بازگشتی، می‌توان به حالت‌های مختلف، تابع بازگشتی را فراخوانی کرد.

در ادامه، به انواع روش‌های بازگشتی اشاره شده است.

  • فراخواندن تابع «بازگشتی به‌طور مستقیم» (Direct Recursion)
  • فراخوانی تابع «بازگشتی به‌طور غیر مستقیم» (Indirect Recursion)
  • روش «بازگشتی دنباله‌دار» (Tailed Recursion)

در بخش بعدی این مطلب از مجله فرادرس، به شرح هر یک از روش‌های فراخوانی تابع بازگشتی پرداخته شده است.

الگوریتم بازگشتی مستقیم

در الگوریتم‌های بازگشتی مستقیم، نام تابع بازگشتی، درون تابع به طور مستقیم فراخوانی می‌شود. در ادامه، مثالی از این نوع الگوریتم بازگشتی را ملاحظه می‌کنید.

1// An example of direct recursion
2void directRecFun()
3{
4    // Some code....
5
6    directRecFun();
7
8    // Some code...
9}

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

در الگوریتم‌های بازگشتی غیر مستقیم، فراخوانی مکرر تابع توسط تابع دیگر انجام می‌شود. در ادامه، مثالی از الگوریتم بازگشتی غیر مستقیم آمده است. در این مثال، توابع void indirectRecFun1  و void indirectRecFun2  از نوع بازگشتی هستند که یکدیگر را فرا می‌خوانند.

1// An example of indirect recursion
2void indirectRecFun1()
3{
4    // Some code...
5
6    indirectRecFun2();
7
8    // Some code...
9}
10void indirectRecFun2()
11{
12    // Some code...
13
14    indirectRecFun1();
15
16    // Some code...
17}

الگوریتم بازگشتی دنباله دار چیست؟

در الگوریتم بازگشتی دنباله‌دار، نیازی به حافظه «پشته» (Stack) برای نگهداری مقادیر حاصل شده از فراخوانی قبلی تابع وجود ندارد. به عبارتی، در این روش، ابتدا محاسبات لازم انجام و سپس تابع بازگشتی فراخوانده می‌شود.

به منظور درک بهتر عملکرد این نوع الگوریتم، می‌توان از مثالی کمک گرفت. فرض کنید می‌خواهیم حاصل جمع اعداد ۱ تا n را محاسبه کنیم. برای حل این مسئله، می‌توان از ۲ روش بازگشتی ساده و دنباله‌دار استفاده کرد. در قطعه کد زیر، از روش بازگشتی ساده برای حل این مسئله به زبان جاوا استفاده شده است.

1public int sumTo(int x) {
2    if (x == 1) {
3        return x;
4    } else {
5        return x + sumTo(x - 1);
6    }
7}

همان‌طور که در قطعه کد بالا ملاحظه می‌شود، برای محاسبه حاصل جمع نهایی، نیاز است نتایج فراخوانی‌های قبلی در پشته ذخیره شوند. نحوه محاسبه مقادیر این تابع در ادامه آمده است.

sumTo(5)
5 + sumTo(4)
5 + (4 + sumTo(3))
5 + (4 + (3 + sumTo(2)))
5 + (4 + (3 + (2 + sumTo(1))))
5 + (4 + (3 + (2 + 1)))
15

بر خلاف روش قبل، در الگوریتم بازگشتی دنباله‌دار، عملیات محاسبات در ابتدا انجام می‌شود و سپس تابع بازگشتی فراخوانده خواهد شد. در قطعه کد زیر، مثال قبل با الگوریتم بازگشتی دنباله‌دار با زبان جاوا پیاده‌سازی شده است.

1public int tailRecSumTo(int x, int total) {
2    if (x == 0) {
3        return total;
4    } else {
5        return tailRecSumTo(x - 1, total + x);
6    }
7}

نحوه محاسبه حاصل جمع نهایی بر اساس قطعه کد بالا به صورت زیر است.

tailRecSumTo(5, 0)
tailRecSumTo(4, 5)
tailRecSumTo(3, 9)
tailRecSumTo(2, 12)
tailRecSumTo(1, 14)
tailRecSumTo(0, 15)
15

همان‌طور که ملاحظه می‌شود،‌ در هر مرحله، محاسبات جمع انجام می‌شود و نیازی به نگهداری تمام مقادیر ورودی تابع در حافظه نیست.

مزایای تابع بازگشتی چیست ؟

روش بازگشتی در برنامه نویسی دارای مزیت‌های مهمی است و همین امر باعث شده است در حل مسائل مختلفی از آن استفاده شود. در ادامه، به برخی از مهم‌ترین مزیت‌های الگوریتم بازگشتی اشاره شده است.

  • ساده‌سازی مسائل پیچیده: با استفاده از الگوریتم بازگشتی می‌توان مسائل پیچیده را به بخش‌های کوچک‌تر تقسیم کرد تا پیاده‌سازی آن‌ها ساده‌تر شود.
  • مدیریت بهتر زمان و حافظه: از آنجایی که الگوریتم بازگشتی باعث کاهش حجم کد نویسی می‌شود، نقش بسزایی در کاهش زمان پردازش و میزان مصرف حافظه دارد.
  • افزایش میزان خوانایی برنامه: الگوریتم بازگشتی نقش مهمی در ساده کردن برنامه نویسی دارد. همین امر باعث افزایش میزان خوانایی برنامه می‌شود.
  • بهبود پردازش داده: با استفاده از روش بازگشتی می‌توان عملیات ذخیره و بازیابی اطلاعات در حافظه را بهبود داد. از این الگوریتم می‌توان برای پیمایش ساختمان داده‌هایی نظیر درخت و گراف به آسانی استفاده کرد.

معایب روش بازگشتی چیست ؟

الگوریتم بازگشتی علیرغم مزیت‌های مهمی که دارد، دارای معایبی نیز هست که در ادامه به مهم‌ترین آن‌ها اشاره می‌کنیم.

  • پر شدن حافظه پشته: در هنگام استفاده از روش بازگشتی ممکن است با خطای پر بودن پشته مواجه شویم. این رویداد زمانی اتفاق می‌افتد که تابع بازگشتی به دفعات زیادی فراخوانده شود.
  • ابهام در درک و خطایابی برنامه: در مسائل پیچیده ممکن است درک و خطایابی برنامه دشوار باشد. به عنوان مثال ممکن است در توابع بازگشتی، چندین حالت توقف در نظر بگیریم که همین امر باعث می‌شود تشخیص نقطه توقف تابع دشوار شود.
  • سرعت اجرای پایین برنامه: با فراخوانی مکرر توابع بازگشتی، ارسال پارامترها به تابع و به‌روزرسانی حافظه پشته اتفاق می‌افتند. این امر سبب می‌شود سرعت اجرای این توابع پایین بیاید.
  • استفاده از روش بازگشتی در مسائل محدود: از الگوریتم بازگشتی صرفاً می‌توان در برخی مسائل خاص استفاده کرد.

جمع‌بندی

الگوریتم بازگشتی یکی از مفاهیم مهم برنامه نویسی است و از آن می‌توان برای ساده‌تر کردن پیاده‌سازی برخی مسائل پیچیده استفاده کرد. این روش از برنامه نویسی بر پایه ۲ مفهوم وضعیت نهایی و مرحله تکرار عمل می‌کند که همین ۲ ویژگی باعث می‌شوند خوانایی و درک برنامه بیشتر شود. در مطلب فعلی از مجله فرادرس سعی داشتیم با زبان ساده به این پرسش‌ها پاسخ دهیم که الگوریتم بازگشتی چیست و مزایا و معایب آن چه هستند. همچنین، با ارائه مثال‌های کاربردی، نحوه عملکرد این روش را توضیح دادیم.

بر اساس رای ۲ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
simplilearngeeksforgeeksTowardsDataScience
۱ دیدگاه برای «الگوریتم بازگشتی چیست؟ – به زبان ساده + مثال و تمرین»

کافی و کامل

نظر شما چیست؟

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