Asosiy tarkibga o‘tish
CodeArena
Kirish
Kurslar

Python vositalari · Kodni funksiyalarga bo‘lish; funksiya o‘zini chaqirganda

Funksiyalar va rekursiya

Medium

Nazariya

Funksiyalar

Funksiya — nomlangan kod bo‘lagi: bir marta yoziladi, ko‘p marta chaqiriladi. Masalani kichik va alohida tekshiriladigan qismlarga bo‘lishning eng yaxshi yo‘li.

def area(w, h):
    return w * h

def min_max(a):
    return min(a), max(a)          # bir nechta qiymat — kortej

lo, hi = min_max([3, 1, 4])
print(area(3, 4))                  # 12

Qoidalar

  • return funksiyadan darhol chiqadi. return bo‘lmasa, funksiya None qaytaradi.
  • Funksiya ichida yaratilgan o‘zgaruvchi tashqarida ko‘rinmaydi. Kerakli qiymatni parametr orqali bering.
  • Ro‘yxatni funksiyaga bersangiz, funksiya o‘sha ro‘yxatni o‘zgartiradi, nusxasini emas.
  • def f(a=[]) deb yozmang: bu ro‘yxat barcha chaqiruvlarda bitta bo‘lib qoladi. a=None qo‘yib, ichida yarating.

Rekursiya

Rekursiya — funksiya o‘zini kichikroq kirish bilan chaqiradi. Har rekursiyada ikki qism bo‘ladi: to‘xtash sharti (baza) va kichraytirish qadami.

def factorial(n):
    if n == 0:              # baza
        return 1
    return n * factorial(n - 1)

def digits_sum(n):
    return n if n < 10 else n % 10 + digits_sum(n // 10)

Qanday o‘ylash kerak

«Kichikroq masala yechilgan deb faraz qilaman. Undan kattasini qanday yasayman?» — shu savolga javob rekursiv qadam bo‘ladi.

Diqqat

  • Python’da chuqurlik chegarasi ~1000: chuqur rekursiyada sys.setrecursionlimit(10**6) yoki siklga o‘tkazing.
  • Bir xil argument qayta-qayta hisoblansa — eslab qoling (functools.lru_cache), bu allaqachon DP.
from functools import lru_cache

@lru_cache(maxsize=None)
def fib(n):
    return n if n < 2 else fib(n - 1) + fib(n - 2)

Bu kurs uchun masalalar tayyorlanmoqda — hozircha nazariyani o‘qing.

Menyu

Ko‘rinish

Klaviatura yorliqlari

Ctrl K yoki /
Qidirish va buyruqlar
g h
Bosh sahifa
g p
Masalalar
g c
Musobaqalar
g r
Reyting
Ctrl Enter
Masala sahifasida — yechimni yuborish
?
Shu oyna