GO

GO — بازگشت (Recursion)

آخرین بروزرسانی: 1404/08/14

بازگشت (Recursion)

بازگشت (Recursion) یعنی تابع خودش را دوباره صدا بزند. این کار تا رسیدن به «شرط توقف» ادامه می یابد. مثل رفتن از پله ها و ایستادن وقتی به آخر رسیدی. این مفهوم در Go بسیار کاربردی است.

بازگشت در Go: ایده اصلی

هر بار تماس دوباره، ورودی کمی تغییر می کند. سپس وقتی شرط توقف رسید، روند می ایستد. «شرط توقف» یعنی وضعیتی که دیگر نباید ادامه دهیم.

package main
import (
  "fmt"
)

func testcount(x int) int {
  if x == 11 {
    return 0
  }
  fmt.Println(x)
  return testcount(x + 1)
}

func main() {
  testcount(1)
}

مشاهده در ادیتور

مثال رایج: فاکتوریل بازگشتی

در فاکتوریل، عدد را در فاکتوریلِ عدد قبلی ضرب می کنیم. شرط توقف اینجاست: وقتی به صفر برسیم.

package main
import (
  "fmt"
)

func factorial_recursion(x float64) (y float64) {
  if x > 0 {
    y = x * factorial_recursion(x - 1)
  } else {
    y = 1
  }
  return
}

func main() {
  fmt.Println(factorial_recursion(4))
}

مشاهده در ادیتور

راهنمای گام به گام

  1. تابع را تعریف کن و ورودی را کم کم تغییر بده.
  2. یک «شرط توقف» واضح قرار بده.
  3. در هر گام، به سمت شرط توقف حرکت کن.

هشدار: اگر شرط توقف نگذاری، برنامه گیر می کند و منابع می سوزد.

نکته: بازگشت گاهی کد را تمیزتر می کند. اما مراقب هزینه زمانی و حافظه باش.

برای کار با ورودی و خروجی تابع، صفحه پارامترها/آرگومان ها و خروجی تابع را هم ببین. سپس با ساختارها (Structs) داده ها را مدل کن.

جمع بندی سریع

  • بازگشت یعنی فراخوانیِ دوباره همان تابع.
  • همیشه شرط توقف بگذار.
  • ورودی باید به توقف نزدیک تر شود.
  • برای فاکتوریل، صفر شرط توقف است.