Sonsuz dövrlər

   Bildiyiniz kimi əgər bir proqram daxilində müəyyən əməliyyatları ardıcıl şəkildə təkrarlamaq lazım gəlirsə, biz dövr operatorlarına müraciət edirik. Dövr operatorları icrası təkrarlanan eyni proqram kodlarını dəfələrlə yazmaqdan bizi azad edir. 

   Python proqramlaşdırma dilində iki növ dövr operatoru nəzərdə tutulmuşdur. Əgər təkrarlanmaların sayı daha öncədən məlumdursa, sayğaclı dövr (for), məlum deyilsə, şərtli dövr (while) operatorundan istifadə olunur. Hər iki dövr operatorunun istifadə qaydası ilə bağlı Python ilə Proqramlaşdırma kitabına (səh. 76-89) müraciət edə bilərsiniz. Bu dərsimizdə isə Sizə proqramlaşdırmada bəzi hallarda istifadə olunan sonsuz dövrlərdən bəhs edəcəyik.

   Proqramlaşdırmada sonsuz dövrlər o dövrlərdir ki, onlardan çıxmaq üçün verilmiş şərt heç zaman ödənmir. Python dilində sonsuz dövrləri qurmaq üçün bir qayda olaraq şərtli dövr (while) konstruksiyasından istifadə olunur. Bu zaman dövrün şərti heç vaxt False olmayacaq şəkildə təyin olunur. Bununla belə dövrün gövdəsində tələb olunan anda onun işini dayandırmaq məqsədilə break operatorundan da istifadə olunur.

while True:
    print("Python ilə proqramlaşdırmaq çox əyləncəlidir")
    print("Davam etmək üçün 1, proqramdan çıxmaq üçün 0 düyməsini basın")
    k=input()
    if k=="0":
        break
    elif k=="1":
        print("Siz daha yolun başlanğıcındasınız...")
    else:
        print("Siz seçiminizi etməmisiniz!")

   Yuxarıdakı proqramda şərtli dövr operatorundan istifadə edilmişdir. Burada dövrün şərti kimi True verildiyinə görə bu şərt hər zaman ödəniləcək. Dolayısıyla dövrümüz sonsuz alınacaq. Lakin buna rəğmən tələb olunan anda break operatorunu tətbiq etməklə dövrün işini dayandıra bilirik.

   Əgər proqramda istifadə olunan sonsuz dövrün gövdəsində onun icrasını dayandıracaq heç bir instruksiya verilmirsə, bu zaman dövr sonsuz sayda icra olunacaq. Məsələn aşağıdakı proqramda olduğu kimi:

i = 1
while True:
    print(i)
    i+=1

   Belə olan halda sonsuz dövrün icrasını dayandırmaq üçün Ctrl+C düymələrinə basmaq lazımdır.

Faktoriyalın hesablanması

   Bu dərsimizdə faktoriyalı hesablayan funksiya tərtib edib onu ana proqramımız içərisində istifadə edəcəyik.

   Riyaziyyatdan da bildiyiniz kimi n ədədinin faktorialı 1-dən n-ə qədər (daxil olmaqla) natural ədədlərin hasilinə bərabərdir. Məsələn, 5!=5*4*3*2*1. Və o da məlumdur ki, 1!=1 və 0!=1. Buradan belə bir məntiq yürütmək olur ki, n! hesablamaq üçün n*(n-1)! hesablamalıyıq, yəni 5!=5*4!. Belə olan halda 4! üçün 4*3!, 3! üçün 3*2!, 2! hesablamaq üçün də 2*1! hesablanmalıdır. 1! isə 1-ə bərabər olduğuna görə rekursiya burada bitmiş olur. Yəgin anladınız ki, biz burada rekursiv funksiya təyin edəcəyəcik. Xatırlatmış olaq ki, proqramlaşdırmada funksiyaların özü özünü çağırmasına rekursiya, bu cür funksiyalara da rekursiv funksiyalar deyilir.

   Aşağıdakı proqram kodunda öncə fakt() adlı rekursiv funksiya təyin olunur və sonra da proqram daxilində çağrılır:

def fakt(n):
    if n <= 1:
        return 1
    else:
        return n*fakt(n-1)

n = int(input())
print("{0}!={1}".format(n,fakt(n)))

    Proqramı çalışdırıb icra etdiyinizdə istədiyiniz ədədin faktoriyalını hesablayacaq.