متد های بازگشتی و کاربرد آن ها در جاوا
مفهوم بازگشتی در جاوا
بازگشتی به مفهومی گفته می شود، که در آن متدی خودش را فراخوانی کند. متد ها می توانند خودشان را به صورت مستقیم و غیر مستقیمفراخوانی کنند.
در روش مستقیم یکی از دستورات موجود در بدنه متد فراخوانی خودش است. اما در روش غیر مستقیم مثلا متد f1 متذ f2 را فراخوانی می کند و f1 دوباره توسط f2 خودش را فراخوانی می کند. کد زیر را ببینید :
int m1(int n) {
    n++;
    m1(n);
}در این کد متد m1 فراخوانی خودش را مستقیم از بدنه متد خودش، انجام می دهد.در اینجا یک حلقه بی نهایت صورت می گیرد و متد در یک پروسه بدون خاتمه قرار می گیرد. بنابر این متد های بازگشتی باید یک شرط برای توقف داشته باشند.
بنابراین طرح کلی الگوریتم های بازگشتی به صورت زیر است
- یک یا چند حالت که در آن متد، وظیفه خودش را به صورت بازگشتی انجام می دهد. یعنی این حالت ها خاصیت بازگشتی دارند.
- یک یا چند حالت که در آن، متد وظیفه خودش را بدون فراخوانی بازگشتی انجام می دهد. این حالت را حالت های توقف یا stop cases گویند.
اغلب برای اینکه فراخوانی های بازگشتی یک جا به پایان برسند، از دستور if استفاده می شود که حلقه های بی نهایت ایجاد نشود.
if (به حالت توقف رسیدی) {
    مسئله حالت توقف را حل کن
} else {
    تابع را بار دیگر فراخوانی کن
}مفهوم بازگشتی ابزاری قدرتمند برای برنامه نویسان است و درک آن برای برنامه نویس میتدی قدری دشوار است. با مثالی به درک بهتر آن می پردازیم و جنبه های تکنیکی آن را مورد بحث قرار نمی دهیم.
یک مثال خوب برای یادگیری مفهوم بازگشتی فاکتوریل می باشد.
if n = 0 then n! = 1 
if n > 0 then n! = 1 * 2 * 3 * ... * (n-1) * nبر اساس این تعریف داریم :
4! = 3! * 4در واقع برای هر n > 0 داریم :
n! = n * (n-1)!این تعریف، فاکتوریل را بر حسب خودش تعریف می کند. یعنی فاکتوریل هر عدد، باید با فاکتوریل عدد قبلی اش محاسبه شود. لذا برای محاسبه فاکتوریل عدد 3، باید فاکتوریل عدد 2 را محاسبه کنیم، برای محاسبه فاکتوریل عدد 2 باید فاکتوریل عدد 1 را محاسبه کنیم، و الی آخر تا به فاکتوریل 0 برسیم.
این مکانیزم، مسئله بازگشتی ایجاب می کند. روند زیر، محاسبه می شود
3! = 3 * 2!
2! = 2 * 1!
1! = 1 * 0!
0! = 1خودت بنویس : برنامه ایی که یک عدد صحیح از ورودی بگیرد و فاکتوریل آن را محاسبه کند
import java.util.*;
 
public class example_6 {
    static Scanner scnr = new Scanner(System.in);
    public static void main(String[] args) {
        int n = 0;
        System.out.print("Enter a number : ");
        n = scnr.nextInt();
        System.out.println("fact(" + n + ") = " + fact(n) );
    }
     
    public static long fact(int n) {
        if (n != 0) {
            return n * fact (n-1);
        }
        return 1;
    }
} آموزش برنامه نویسی جاوا
                                              آموزش برنامه نویسی جاوا
                                         آموزش برنامه نویسی PHP
                                              آموزش برنامه نویسی PHP
                                         آموزش زبان sql
                                              آموزش زبان sql
                                         جاوا
                                          جاوا
                                     جاوا اف ایکس
                                          جاوا اف ایکس
                                     کدایگنایدر
                                          کدایگنایدر
                                     الگوریتم
                                          الگوریتم
                                     شبکه
                                          شبکه
                                     وب
                                          وب
                                     اس کیو ال
                                          اس کیو ال
                                     نکات برنامه نویسی
                                          نکات برنامه نویسی