Skip to content

Latest commit

 

History

History
61 lines (47 loc) · 1.46 KB

2. Base case and recursive case.md

File metadata and controls

61 lines (47 loc) · 1.46 KB

Base case and recursive case

Rekursiv funktsiya o'zini chaqirganligi sababli, cheksiz tsikl bilan tugaydigan funktsiyani noto'g'ri yozish oson. Misol uchun, siz ortga hisoblashni chop etuvchi funktsiyani yozmoqchisiz, deylik:

Key

> 3...2...1

Siz uni rekursiv tarzda yozishingiz mumkin, masalan:

Python

def countdown(i):
    print i
    countdown(i-1)

Golang

func countdown(i int) {
    fmt.Println(i)
    countdown(i-1)
}

Ushbu kodni yozing va uni ishga tushiring. Muammoni sezasiz: bu funksiya abadiy ishlaydi!

Infinitive loop

> 3...2...1...0...-1...-2...-3...

(Skriptingizni o'chirish uchun Ctrl-C tugmalarini bosing.) Rekursiv funktsiyani yozganingizda, uni qachon takrorlashni to'xtatish kerakligini aytishingiz kerak. Shuning uchun har bir rekursiv funktsiya ikki qismdan iborat: asosiy va rekursiv holat. Rekursiv holat - bu funksiya o'zini chaqirganda. Asosiy holat - bu funktsiya o'zini qayta chaqirmasa ... shuning uchun u cheksiz tsiklga kirmaydi.

Ortga hisoblash funksiyasiga asosiy registrni qo'shamiz:

Base case

Python

def countdown(i):
    print i
    if i <= 0:
        return
    else:
        countdown(i-1)

Golang

func countdown(i int) {
    fmt.Println(i)
    if i <= 0 {
        return
    } else {
        countdown(i-1)
    }
}

Endi funksiya kutilganidek ishlaydi. Bu shunga o'xshash narsaga o'tadi.

Recursive