Rekursi

Ada satu trik lagi yang digunakan orang-orang saat menggunakan method. Trik ini agak rumit, jadi tidak perlu dikuasai tapi perlu dibahas jadi mungkin suatu saat kalian dapat mempertimbangkan untuk menggunakan teknik ini.

Trik ini disebut sebagai rekursi, dan ini adalah dimana kalian memanggul method didalam method tersebut sendiri. Berikut contoh sederhananya:

static void Recursion()
{
    Recursion();
}

Ketika method tersebut di panggil dari luar (misal, Main), method itu akan terus memanggil dirinya sendiri sampai kehabisan memory untuk memanggil method lagi, dan program akan crash

Masalahnya pada contoh tersebut adalah, tidak adanya base case. Rekursi selalu membutuhkan suatu keadaaan dimana ia tidak akan memanggil dirinya lagi, setiap kali ia memanggil dirinya sendiri, apa yang seharusnya terjadi adalah ia harus semakin mendekati base case. Jika tidak, ia tidak akan pernah selesai, dan tidak akan kembali ke pemanggil di awal.

Satu contoh klasik dimana kalian dapat menggunakan rekursi adalah fungsi faktorial di matematika. Mungkin kalian ingat, pada matematika, faktorial, ditulis sebagai tanda seru setelah angka, berarti untuk mengambilnya, lalu mengalikan angka tersebut dengan angka yang lebih kecil. Contohnya, 7! berarti 7 * 6 * 5 * 4 * 3 * 2 * 1.

72! berarti 72 * 71 * 70 * 60 * .. * 3 * 2 * 1.

Dari sini kita tahu bahwa 1! 1. Ini dapat menjadi base case kita. Faktorial untuk bilangan lain dapat kita anggap sebagai angka yang di kalikan dengan faktorial dari angka lebih kecil dari angka itu sendiri. Jadi 7! adalah sama dengan 7 * 6!

Maka untuk membuat method factorial, kita dapat menuliskan:

static int Factorial(int number)
{
    // Base case
    if (number == 1)
        return 1;
    
    return number * Factorial(number - 1);
}

Last updated