Go بالأمثلة: التكرار (Recursion)

تدعم لغة Go الدوال التكرارية. إليك مثال كلاسيكي لحساب المضروب (factorial).

package main

import "fmt"

هذه دالة fact تستدعي نفسها حتى تصل إلى الحالة الأساسية (base case) وهي fact(0).

func fact(n int) int {
    if n == 0 {
        return 1
    }
    return n * fact(n-1)
}

func main() {
    fmt.Println(fact(7))

يمكن للدوال المجهولة أيضاً أن تكون تكرارية، ولكن هذا يتطلب التصريح صراحة عن متغير باستخدام var لتخزين الدالة قبل تعريفها.

    var fib func(n int) int

    fib = func(n int) int {
        if n < 2 {
            return n
        }

بما أن fib تم التصريح عنها مسبقاً في main تعرف Go أي دالة يجب استدعاؤها باستخدام fib هنا.

        return fib(n-1) + fib(n-2)
    }

    fmt.Println(fib(7))
}

تشغيل البرنامج:

$ go run recursion.go 
5040
13

المثال التالي: المؤشرات (Pointers).