Python rekursiya


ULASHISH

Rekursiya

Rekursiya - funksiya o‘zini chaqirganda.

Rekursiya umumiy matematik va dasturlash tushunchasidir. Bu funksiya o‘zini chaqirishini anglatadi. Buning foydasi shundaki, natijaga erishish uchun ma’lumotlar orqali aylanishingiz mumkin.

Ishlab chiquvchi rekursiya bilan juda ehtiyot bo‘lishi kerak, chunki hech qachon tugamaydigan yoki ortiqcha xotira yoki protsessor quvvatini ishlatadigan funksiyani yozish juda oson bo‘lishi mumkin. Biroq, to‘g‘ri yozilsa, rekursiya dasturlashda juda samarali va matematik jihatdan oqlangan yondashuv bo‘lishi mumkin.

Misol

5 dan pastga sanaydigan oddiy rekursiv funksiya:

def countdown(n):   if n <= 0:     print("Done!")   else:     print(n)     countdown(n - 1) countdown(5)
O‘zingiz sinab ko‘ring »

Asosiy va rekursiv hol

Har bir rekursiv funksiya ikki qismdan iborat bo‘lishi kerak:

  • Asosiy holat - Rekursiyani to‘xtatuvchi shart
  • Rekursiv holat - o‘zgartirilgan argument bilan o‘zini chaqiradigan funksiya

Asosiy stateless (ichki state saqlamaydigan), funksiya o‘zini abadiy chaqiradi va stekni to‘ldirish xatosiga sabab bo‘ladi.

Misol

Asosiy va rekursiv holatni aniqlash:

def factorial(n):   # Base case   if n == 0 or n == 1:     return 1   # Recursive case   else:     return n * factorial(n - 1) print(factorial(5))
O‘zingiz sinab ko‘ring »

Asosiy holat hal qiluvchi ahamiyatga ega. Har doim rekursiv funksiyangiz oxir-oqibat bajariladigan shartga ega ekanligiga ishonch hosil qiling.



Fibonachchi ketma-ketligi

Fibonachchi ketma-ketligi klassik misol bo‘lib, har bir raqam oldingi ikkitasining yig‘indisidir. Tartib 0 va 1 bilan boshlanadi:

0, 1, 1, 2, 3, 5, 8, 13, ...

Ketma-ketlik cheksiz davom etadi, har bir raqam oldingi ikkitasining yig‘indisidir.

Biz ketma-ketlikda ma’lum bir raqamni topish uchun rekursiyadan foydalanishimiz mumkin:

Misol

Fibonachchi qatoridagi 7-raqamni toping:

def fibonacci(n):   if n <= 1:     return n   else:     return fibonacci(n - 1) + fibonacci(n - 2) print(fibonacci(7))
O‘zingiz sinab ko‘ring »

Listlar bilan rekursiya

Rekursiya bir vaqtning o‘zida bitta element bilan ishlash orqali listlarni qayta ishlash uchun ishlatilishi mumkin:

Misol

Ro‘yxatdagi barcha elementlarning yig‘indisini hisoblang:

def sum_list(numbers):   if len(numbers) == 0:     return 0   else:     return numbers[0] + sum_list(numbers[1:]) my_list = [1, 2, 3, 4, 5] print(sum_list(my_list))
O‘zingiz sinab ko‘ring »

Misol

Ro‘yxatdagi maksimal qiymatni toping:

def find_max(numbers):   if len(numbers) == 1:     return numbers[0]   else:     max_of_rest = find_max(numbers[1:])     return numbers[0] if numbers[0] > max_of_rest else max_of_rest my_list = [3, 7, 2, 9, 1] print(find_max(my_list))
O‘zingiz sinab ko‘ring »

Rekursiya chuqurligi chegarasi

Pythonda rekursiya qanchalik chuqurlashishi mumkinligi chegarasi bor. Odatiy chegara odatda 1000 ga yaqin rekursiv chaqiruvdir.

Misol

Rekursiya chegarasini tekshiring:

import sys print(sys.getrecursionlimit())
O‘zingiz sinab ko‘ring »

Agar sizga chuqurroq rekursiya kerak bo‘lsa, chegarani oshirishingiz mumkin, ammo ehtiyot bo‘ling, chunki bu buzilishlarga olib kelishi mumkin:

Misol

import sys sys.setrecursionlimit(2000) print(sys.getrecursionlimit())

Rekursiya chegarasini oshirish ehtiyotkorlik bilan amalga oshirilishi kerak. Juda chuqur rekursiya uchun uning o‘rniga iteratsiyadan foydalanishni o‘ylab ko‘ring.


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!