SlideShare a Scribd company logo
Функциялар
Мысалы, 5! = 1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ 5 = 120 есептеу керек. Факториалды for циклды пайдаланып оңай
есептеуге болатыны түсінікті. Бірақ егер программада бірнеше сандар факториалын есептеу керек
болса, онда оны бір рет жазып оны әр жерлерге көшіріп жазуға болады, бірақта ол тиімді емес.
Сондықтан программалауда функциялар бар.
Функция — бұл программаның қалған бөлігінен оқшауланған және шақырылған кезде ғана
орындалатын кодтың бөліктері.
Мысалы sqrt(), len() және print() функциялары. Олардың барлығы ортақ қасиеттерге тән: олар
параметрлерді (нөл, бір немесе бірнеше) қабылдап, мәндерді қайтарады. Мысалы, sqrt() функциясы
бір параметрді қабылдайды және мәнді (түбір астындағы санды) қайтарады. Ал print() функциясы
айнымалы сандарды қабылдап, ештенені қайтармайды.
Енді кез келен санның факториалын есептейтін функцияны жазайық. Factorial() функиясы бір
параметрді қабылдайды да, мәнді қайтарады.
def factorial(n):
res = 1
for i in range(1, n + 1):
res *= i
return res
print(factorial(3))
print(factorial(5))
Функциялар
Нәтижесі:
6
120
Функциялар
1) Функция коды программаның басында (функцияны қолданар алдында) орналасу керек;
2) Функцияның бірінші жолы түсініктеме ретінде қолданылады (factorial() – идентификатор, яғни
функция аты). Идентификатордан кейін дөңгелек жақшада параметрлер тізімі жазылады;
3) Қос нүктеден кейін бос орын қалдырылып функция денесі жазылады.
4) Функция ішінде n факториал есептеліп res айнымалысына жазылады.
5) Функция return res инструкциясы арқылы функцияны аяқтайды да res айнымалысына мәнді
қайтарады.
6) Return инструкциясы функцияның кез келген жерінде қолданыла алады, оның орындалуы функция
жұмысын тоқтатады.
7) Егер функция мәнді қайтармайтын болса, онда return инструкциясы қайтармайтын мәнсіз
қолданылады.
8) Мән қайтармайтын функцияларда return инструкциясын қолданбауға болады.
2 мысал: екі сан қабылдайтын және екеуінің үлкен мәнін қайтаратын max() функциясын жазу.
def max(a, b):
if a > b:
return a
else:
return b
print(max(3, 5))
print(max(5, 3))
print(max(int(input()), int(input())))
3 мысал: үш сан қабылдайтын және олардың ішінен үлкен мәнді қайтаратын max3() функциясын
жазу.
def max3(a, b, c):
return max(max(a, b), c)
print(max3(3, 5, 4))
Функциялар
Нәтижесі:
5
5
62
34
62
Нәтижесі:
5
Пайтон тілінде аргументтердін айнымаы сандарын қабылдайтын және олардың үлкенін өайтаратын
стандартты max() функциясы бар. Программада бұл функция қолдану мысалы:
def max(*a):
res = a[0]
for val in a[1:]:
if val > res:
res = val
return res
print(max(3, 5, 4))
Осы функцияға жіберілетін барлық параметрлер, функцияны жариялау жолында белгіленген
жұлдызша а атты бір кортежге жиналады.
Кортеж (tuple) – бұл өзгермейтін объектілер тізімі. Кортеждер тізімдермен ұқсас болып келеді, бірақ
бір ерекшелігі ол – кортеж элементтерін өзгертуге болмайды және оларды тізімдегідей тік жақшаға
емес дөңгелек жақшға жазады.
Функциялар
Нәтижесі:
5
Кортеж қарапайым, үтірмен бөлінген элементтерді меншіктеу арқылы құрылады. Немесе оларды
жақшаға алып жзуға болады. Мысалы:
tup1 =('physics', 'chemistry', 1997, 2000)
tup2 =(1, 2, 3, 4, 5)
tup3 ="a", "b", "c", "d"
Бос кортеж боc жақшалармен көрсетіледі:
tup1 =()
Бір элементтен тұратын кортжді көрсететін болсақ, онда жазылған элементтен кейін де міндетті
түрде үтір қойылады:
tup1 =(50,)
print (tup1[0])
Функциялар
Функцияның сыртында жарияланған, және функция ішінде қол жетімді айнымалылар жаһандық
(глобалды) деп аталады.
Мысалы:
def f():
print(a)
a = 1
f()
Мұндағы: а айнымалысына 1 мәні меншіктелінеді, және f функция жарияланғанша бұл айнымалы
иницалданбаса да f() функциясы осы мәнді баспаға шығарады. f() функцияны шақырғанға деййін
айнымалыға мән меншіктеледі, сондықтан f() функциясы оны экранға шығары алады.
Жергілікті және жаһандық айнымалылар
Функцияның сыртында жарияланған, және функция ішінде қол жетімді айнымалылар жаһандық
(глобалды) деп аталады.
Мысалы:
def f():
print(a)
a = 1
f()
Мұндағы: а айнымалысына 1 мәні меншіктелінеді, және f функция жарияланғанша бұл айнымалы
иницалданбаса да f() функциясы осы мәнді баспаға шығарады. f() функцияны шақырғанға деййін
айнымалыға мән меншіктеледі, сондықтан f() функциясы оны экранға шығары алады.
Жергілікті және жаһандық айнымалылар
Егер айнымалыны функция ішінде жарияласа, онда оны функциядан тыс жерде қолданыла алмайды.
Бұндай айнымалыларды жергілікті (локалды) де атайды.
Мысалы:
def f():
a = 1
f()
print(a)
Нәтижесінде NameError: name 'a' is not defined қатесін аламыз. Осындай анымалылар функция
сыртына шыққанда қол жетпес болады.
Егер жаһандық айнымалының мәнін функция ішінде өзгертетсе, онда:
1 және 0 сандары шығарылады. Функция ішінде а мәні өзгерсе де, функция
сыртында ол өзгермей қалды. Бұл жаһандық айнымалыларды функция ішінен
кез-келген өзгертулерден «сақтау» мақсатында жазылған.
Жергілікті және жаһандық айнымалылар
def f():
a = 1
print(a)
a = 1
f()
print(a)
Егер функция циклдан і айнымалысы арқылы шақырылса, және де бұл функцияда да циклды
ұйымдстыру үшін і айнымалысы қолданылса, онда олар әр түрлі болу керек.
def factorial(n):
res = 1
for i in range(1, n + 1):
res *= i
return res
for i in range(1, 6):
print(i, ' ! = ', factorial(i), sep='')
қатесін аламыз. Осындай анымалылар функция сыртына шыққанда қол жетпес болады.
Рекурсия
Нәтижесі:
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
Функция жаһандық айнымалының мәнін өзгерту үшін, осы айнымалыны функция ішінде жаһандық
айнымалы ретінде, global кілттік сөзі көмегімен жариялау керек:
def f( ):
global a
a=1
print(a)
a=0
f( )
print(a)
Нәтижесі a айнымалысы жаһандық ретінде жарияланған, және оның функция ішіндегі өзгеруі,
айнымалының функциядан тыс жерде де қол жетімді болатынына көрсетеді.
Ескерту: Жаһандық айнымалыны функция ішінде өзгертпегені жақсы.
Жергілікті және жаһандық айнымалылар
Нәтижесі:
1
1
# Кодтын басында жазылған бөлігін, бір программадан екінші программаға көшіріп жаза беруге
болады:
def factorial(n):
res = 1
for i in range(2, n + 1):
res *= i
return res
n = int(input())
f = factorial(n)
print(n, '! = ', f)
# әрі қарай f айнымалысымен кез-келген әркеттерді орындауға болады.
Жергілікті және жаһандық айнымалылар
Нәтижесі:
5! = 120
Рекурсия дегеніміз – бұл өзін-өзі шақыратын функция, ал рекурсияны қолданатын функция
рекурсивті функция деп аталады.
Рекурсия көмегімен n! есептеп көрейік:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
print(factorial(5))
Есакерту: Рекурсивті функция құру кезінде рекурсияның аяқталуын міндетті түрде жариялау керек,
әйтпесе шексіз функция болуы мүмкін. Шексіздік рекурсивті функцияны жариялаудын екі түрі:
1) Рекурсиядан шығуды дұрыс емес жариялау. Мысалы, егер программада факториалды есептеу
кезінде if n == 0 шартын жазбасақ, онда factorial(0) factorial(-1)-ді шақырады, ал factorial(-1)
factorial(-2)-ні шақырады және т.с.с.
2) Дұрыс емес параметрлі рекурсивті функцияны шақыру. Мысалы, егер factorial(n) функциясы
factorial(n) шақырса, онда тура солай сияқты шексіз функция пайда болады.
Рекурсия
Нәтижесі:
120
Мысалы, Фибоначчидін n-ші санын екі түрімен есептеу.
Циклды қолданып n-ші санын есептеу:
Алгоритмі:
1. Тізбектін алғашқы екі (fib1 және fib2) мәнін енгізу.
2. Анықталатын элементтін нөмірін енгізу (n)
3. Төмене көрсетілген әрекеттерді екі бірлікке азайтылған (өйткені fib1 және fib2 белгілі) n рет
қайталау. 3.1. fib1 және fib2 қосу, және оны үшінші (fib_sum) айнымалыға меншіктеу.
3.2. Алғашқы мәндерін ауыстыру керек: fib1=fib2, ал fib2=fib_sum
Рекурсияны қолданып n-ші санын есептеу:
Алгоритмі:
1. Егер n=1 немесе n=2, онда шақырылатын тармағына бір бірлікті қайтару (себебі, Фибоначчи
тізбегінің бірінші және екінші элементтері бірге тең).
2. Қалған басқа жағдайларды сол функцияны n-1 және n-2 аргументімен қайта шақыру. Екі шақырудың
нәтижесін қосып, оны программанын шақырылатын тармаққа қайтару керек.
Python тілінде жазылуы:
Тексеріс үшін Фибоначчи сандары: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584,
4181, 6765, 10946,…
fib1 = 1
fib2 = 1
n = input (“Фибоначчидін қай n-ші санын
есептейсіз? ")
n = int(n) # бүтір санға түрлендіру
i = 2
while i < n:
fib_sum = fib2 + fib1
fib1 = fib2
fib2 = fib_sum
i += 1
print (fib_sum)
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
print(factorial(5))

More Related Content

What's hot

File Handling in Java.pdf
File Handling in Java.pdfFile Handling in Java.pdf
File Handling in Java.pdf
SudhanshiBakre1
 
Ansible Callback Plugins
Ansible Callback PluginsAnsible Callback Plugins
Ansible Callback Plugins
jtyr
 
Basis and dimension of vector space
Basis and dimension of  vector spaceBasis and dimension of  vector space
Basis and dimension of vector space
NaliniSPatil
 
Sinir dokusu ve sinir sistemi
Sinir dokusu ve sinir sistemiSinir dokusu ve sinir sistemi
Introduction to Matlab for Engineering Students.pdf
Introduction to Matlab for Engineering Students.pdfIntroduction to Matlab for Engineering Students.pdf
Introduction to Matlab for Engineering Students.pdf
DrAzizulHasan1
 
Golang Channels
Golang ChannelsGolang Channels
Golang Channels
Joris Bonnefoy
 
loops in C ppt.pdf
loops in C ppt.pdfloops in C ppt.pdf
loops in C ppt.pdf
DrSamsonChepuri1
 
UNIT 10. Files and file handling in C
UNIT 10. Files and file handling in CUNIT 10. Files and file handling in C
UNIT 10. Files and file handling in C
Ashim Lamichhane
 
Latent Dirichlet Allocation
Latent Dirichlet AllocationLatent Dirichlet Allocation
Latent Dirichlet Allocation
KyeongUkJang
 
signal and system Dirac delta functions (1)
signal and system Dirac delta functions (1)signal and system Dirac delta functions (1)
signal and system Dirac delta functions (1)
iqbal ahmad
 
Basics of shell programming
Basics of shell programmingBasics of shell programming
Basics of shell programming
Chandan Kumar Rana
 
Architecture-of-Linux-operating-system.docx
Architecture-of-Linux-operating-system.docxArchitecture-of-Linux-operating-system.docx
Architecture-of-Linux-operating-system.docx
VivekGupta920049
 
Tıbbi Terminoloji 3 - Hastalık/Tanı/Tedavi Terimleri
Tıbbi Terminoloji 3 - Hastalık/Tanı/Tedavi TerimleriTıbbi Terminoloji 3 - Hastalık/Tanı/Tedavi Terimleri
Tıbbi Terminoloji 3 - Hastalık/Tanı/Tedavi Terimleri
rgnksz
 
Introduction to Capsule Networks
Introduction to Capsule NetworksIntroduction to Capsule Networks
Introduction to Capsule Networks
Chia-Ching Lin
 
Learning sed and awk
Learning sed and awkLearning sed and awk
Learning sed and awk
Yogesh Sawant
 
FILES IN C
FILES IN CFILES IN C
FILES IN C
yndaravind
 
Docker cheat-sheet
Docker cheat-sheetDocker cheat-sheet
Docker cheat-sheet
Peđa Delić
 
Dynamic memory allocation
Dynamic memory allocationDynamic memory allocation
Dynamic memory allocation
Viji B
 
Monitoring SLA with Prometheus and LibreOffice Calc
Monitoring SLA with Prometheus and LibreOffice CalcMonitoring SLA with Prometheus and LibreOffice Calc
Monitoring SLA with Prometheus and LibreOffice Calc
Didiet A. Pambudiono
 

What's hot (20)

File Handling in Java.pdf
File Handling in Java.pdfFile Handling in Java.pdf
File Handling in Java.pdf
 
Ansible Callback Plugins
Ansible Callback PluginsAnsible Callback Plugins
Ansible Callback Plugins
 
Basis and dimension of vector space
Basis and dimension of  vector spaceBasis and dimension of  vector space
Basis and dimension of vector space
 
Sinir dokusu ve sinir sistemi
Sinir dokusu ve sinir sistemiSinir dokusu ve sinir sistemi
Sinir dokusu ve sinir sistemi
 
Introduction to Matlab for Engineering Students.pdf
Introduction to Matlab for Engineering Students.pdfIntroduction to Matlab for Engineering Students.pdf
Introduction to Matlab for Engineering Students.pdf
 
Golang Channels
Golang ChannelsGolang Channels
Golang Channels
 
Kas Dokusu
Kas DokusuKas Dokusu
Kas Dokusu
 
loops in C ppt.pdf
loops in C ppt.pdfloops in C ppt.pdf
loops in C ppt.pdf
 
UNIT 10. Files and file handling in C
UNIT 10. Files and file handling in CUNIT 10. Files and file handling in C
UNIT 10. Files and file handling in C
 
Latent Dirichlet Allocation
Latent Dirichlet AllocationLatent Dirichlet Allocation
Latent Dirichlet Allocation
 
signal and system Dirac delta functions (1)
signal and system Dirac delta functions (1)signal and system Dirac delta functions (1)
signal and system Dirac delta functions (1)
 
Basics of shell programming
Basics of shell programmingBasics of shell programming
Basics of shell programming
 
Architecture-of-Linux-operating-system.docx
Architecture-of-Linux-operating-system.docxArchitecture-of-Linux-operating-system.docx
Architecture-of-Linux-operating-system.docx
 
Tıbbi Terminoloji 3 - Hastalık/Tanı/Tedavi Terimleri
Tıbbi Terminoloji 3 - Hastalık/Tanı/Tedavi TerimleriTıbbi Terminoloji 3 - Hastalık/Tanı/Tedavi Terimleri
Tıbbi Terminoloji 3 - Hastalık/Tanı/Tedavi Terimleri
 
Introduction to Capsule Networks
Introduction to Capsule NetworksIntroduction to Capsule Networks
Introduction to Capsule Networks
 
Learning sed and awk
Learning sed and awkLearning sed and awk
Learning sed and awk
 
FILES IN C
FILES IN CFILES IN C
FILES IN C
 
Docker cheat-sheet
Docker cheat-sheetDocker cheat-sheet
Docker cheat-sheet
 
Dynamic memory allocation
Dynamic memory allocationDynamic memory allocation
Dynamic memory allocation
 
Monitoring SLA with Prometheus and LibreOffice Calc
Monitoring SLA with Prometheus and LibreOffice CalcMonitoring SLA with Prometheus and LibreOffice Calc
Monitoring SLA with Prometheus and LibreOffice Calc
 

Similar to Функциялар

Қайталау операторы
Қайталау операторыҚайталау операторы
Қайталау операторы
AssylkhanK
 
Тармақталған алгоритмдерді программалау лабораториялық жұмыc 8
Тармақталған алгоритмдерді  программалау лабораториялық жұмыc 8 Тармақталған алгоритмдерді  программалау лабораториялық жұмыc 8
Тармақталған алгоритмдерді программалау лабораториялық жұмыc 8
Айбек Қуандықұлы
 
Паскаль тілінде программалау
Паскаль тілінде программалауПаскаль тілінде программалау
Паскаль тілінде программалау
Айбек Қуандықұлы
 
Қатарлар
ҚатарларҚатарлар
Қатарлар
AssylkhanK
 
ашык сабак жоспары
ашык сабак жоспарыашык сабак жоспары
ашык сабак жоспары
oquzaman
 
Тармақталу командалары
Тармақталу командаларыТармақталу командалары
Тармақталу командалары
Айбек Қуандықұлы
 

Similar to Функциялар (6)

Қайталау операторы
Қайталау операторыҚайталау операторы
Қайталау операторы
 
Тармақталған алгоритмдерді программалау лабораториялық жұмыc 8
Тармақталған алгоритмдерді  программалау лабораториялық жұмыc 8 Тармақталған алгоритмдерді  программалау лабораториялық жұмыc 8
Тармақталған алгоритмдерді программалау лабораториялық жұмыc 8
 
Паскаль тілінде программалау
Паскаль тілінде программалауПаскаль тілінде программалау
Паскаль тілінде программалау
 
Қатарлар
ҚатарларҚатарлар
Қатарлар
 
ашык сабак жоспары
ашык сабак жоспарыашык сабак жоспары
ашык сабак жоспары
 
Тармақталу командалары
Тармақталу командаларыТармақталу командалары
Тармақталу командалары
 

Функциялар

  • 2. Мысалы, 5! = 1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ 5 = 120 есептеу керек. Факториалды for циклды пайдаланып оңай есептеуге болатыны түсінікті. Бірақ егер программада бірнеше сандар факториалын есептеу керек болса, онда оны бір рет жазып оны әр жерлерге көшіріп жазуға болады, бірақта ол тиімді емес. Сондықтан программалауда функциялар бар. Функция — бұл программаның қалған бөлігінен оқшауланған және шақырылған кезде ғана орындалатын кодтың бөліктері. Мысалы sqrt(), len() және print() функциялары. Олардың барлығы ортақ қасиеттерге тән: олар параметрлерді (нөл, бір немесе бірнеше) қабылдап, мәндерді қайтарады. Мысалы, sqrt() функциясы бір параметрді қабылдайды және мәнді (түбір астындағы санды) қайтарады. Ал print() функциясы айнымалы сандарды қабылдап, ештенені қайтармайды. Енді кез келен санның факториалын есептейтін функцияны жазайық. Factorial() функиясы бір параметрді қабылдайды да, мәнді қайтарады. def factorial(n): res = 1 for i in range(1, n + 1): res *= i return res print(factorial(3)) print(factorial(5)) Функциялар Нәтижесі: 6 120
  • 3. Функциялар 1) Функция коды программаның басында (функцияны қолданар алдында) орналасу керек; 2) Функцияның бірінші жолы түсініктеме ретінде қолданылады (factorial() – идентификатор, яғни функция аты). Идентификатордан кейін дөңгелек жақшада параметрлер тізімі жазылады; 3) Қос нүктеден кейін бос орын қалдырылып функция денесі жазылады. 4) Функция ішінде n факториал есептеліп res айнымалысына жазылады. 5) Функция return res инструкциясы арқылы функцияны аяқтайды да res айнымалысына мәнді қайтарады. 6) Return инструкциясы функцияның кез келген жерінде қолданыла алады, оның орындалуы функция жұмысын тоқтатады. 7) Егер функция мәнді қайтармайтын болса, онда return инструкциясы қайтармайтын мәнсіз қолданылады. 8) Мән қайтармайтын функцияларда return инструкциясын қолданбауға болады.
  • 4. 2 мысал: екі сан қабылдайтын және екеуінің үлкен мәнін қайтаратын max() функциясын жазу. def max(a, b): if a > b: return a else: return b print(max(3, 5)) print(max(5, 3)) print(max(int(input()), int(input()))) 3 мысал: үш сан қабылдайтын және олардың ішінен үлкен мәнді қайтаратын max3() функциясын жазу. def max3(a, b, c): return max(max(a, b), c) print(max3(3, 5, 4)) Функциялар Нәтижесі: 5 5 62 34 62 Нәтижесі: 5
  • 5. Пайтон тілінде аргументтердін айнымаы сандарын қабылдайтын және олардың үлкенін өайтаратын стандартты max() функциясы бар. Программада бұл функция қолдану мысалы: def max(*a): res = a[0] for val in a[1:]: if val > res: res = val return res print(max(3, 5, 4)) Осы функцияға жіберілетін барлық параметрлер, функцияны жариялау жолында белгіленген жұлдызша а атты бір кортежге жиналады. Кортеж (tuple) – бұл өзгермейтін объектілер тізімі. Кортеждер тізімдермен ұқсас болып келеді, бірақ бір ерекшелігі ол – кортеж элементтерін өзгертуге болмайды және оларды тізімдегідей тік жақшаға емес дөңгелек жақшға жазады. Функциялар Нәтижесі: 5
  • 6. Кортеж қарапайым, үтірмен бөлінген элементтерді меншіктеу арқылы құрылады. Немесе оларды жақшаға алып жзуға болады. Мысалы: tup1 =('physics', 'chemistry', 1997, 2000) tup2 =(1, 2, 3, 4, 5) tup3 ="a", "b", "c", "d" Бос кортеж боc жақшалармен көрсетіледі: tup1 =() Бір элементтен тұратын кортжді көрсететін болсақ, онда жазылған элементтен кейін де міндетті түрде үтір қойылады: tup1 =(50,) print (tup1[0]) Функциялар
  • 7. Функцияның сыртында жарияланған, және функция ішінде қол жетімді айнымалылар жаһандық (глобалды) деп аталады. Мысалы: def f(): print(a) a = 1 f() Мұндағы: а айнымалысына 1 мәні меншіктелінеді, және f функция жарияланғанша бұл айнымалы иницалданбаса да f() функциясы осы мәнді баспаға шығарады. f() функцияны шақырғанға деййін айнымалыға мән меншіктеледі, сондықтан f() функциясы оны экранға шығары алады. Жергілікті және жаһандық айнымалылар
  • 8. Функцияның сыртында жарияланған, және функция ішінде қол жетімді айнымалылар жаһандық (глобалды) деп аталады. Мысалы: def f(): print(a) a = 1 f() Мұндағы: а айнымалысына 1 мәні меншіктелінеді, және f функция жарияланғанша бұл айнымалы иницалданбаса да f() функциясы осы мәнді баспаға шығарады. f() функцияны шақырғанға деййін айнымалыға мән меншіктеледі, сондықтан f() функциясы оны экранға шығары алады. Жергілікті және жаһандық айнымалылар
  • 9. Егер айнымалыны функция ішінде жарияласа, онда оны функциядан тыс жерде қолданыла алмайды. Бұндай айнымалыларды жергілікті (локалды) де атайды. Мысалы: def f(): a = 1 f() print(a) Нәтижесінде NameError: name 'a' is not defined қатесін аламыз. Осындай анымалылар функция сыртына шыққанда қол жетпес болады. Егер жаһандық айнымалының мәнін функция ішінде өзгертетсе, онда: 1 және 0 сандары шығарылады. Функция ішінде а мәні өзгерсе де, функция сыртында ол өзгермей қалды. Бұл жаһандық айнымалыларды функция ішінен кез-келген өзгертулерден «сақтау» мақсатында жазылған. Жергілікті және жаһандық айнымалылар def f(): a = 1 print(a) a = 1 f() print(a)
  • 10. Егер функция циклдан і айнымалысы арқылы шақырылса, және де бұл функцияда да циклды ұйымдстыру үшін і айнымалысы қолданылса, онда олар әр түрлі болу керек. def factorial(n): res = 1 for i in range(1, n + 1): res *= i return res for i in range(1, 6): print(i, ' ! = ', factorial(i), sep='') қатесін аламыз. Осындай анымалылар функция сыртына шыққанда қол жетпес болады. Рекурсия Нәтижесі: 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120
  • 11. Функция жаһандық айнымалының мәнін өзгерту үшін, осы айнымалыны функция ішінде жаһандық айнымалы ретінде, global кілттік сөзі көмегімен жариялау керек: def f( ): global a a=1 print(a) a=0 f( ) print(a) Нәтижесі a айнымалысы жаһандық ретінде жарияланған, және оның функция ішіндегі өзгеруі, айнымалының функциядан тыс жерде де қол жетімді болатынына көрсетеді. Ескерту: Жаһандық айнымалыны функция ішінде өзгертпегені жақсы. Жергілікті және жаһандық айнымалылар Нәтижесі: 1 1
  • 12. # Кодтын басында жазылған бөлігін, бір программадан екінші программаға көшіріп жаза беруге болады: def factorial(n): res = 1 for i in range(2, n + 1): res *= i return res n = int(input()) f = factorial(n) print(n, '! = ', f) # әрі қарай f айнымалысымен кез-келген әркеттерді орындауға болады. Жергілікті және жаһандық айнымалылар Нәтижесі: 5! = 120
  • 13. Рекурсия дегеніміз – бұл өзін-өзі шақыратын функция, ал рекурсияны қолданатын функция рекурсивті функция деп аталады. Рекурсия көмегімен n! есептеп көрейік: def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1) print(factorial(5)) Есакерту: Рекурсивті функция құру кезінде рекурсияның аяқталуын міндетті түрде жариялау керек, әйтпесе шексіз функция болуы мүмкін. Шексіздік рекурсивті функцияны жариялаудын екі түрі: 1) Рекурсиядан шығуды дұрыс емес жариялау. Мысалы, егер программада факториалды есептеу кезінде if n == 0 шартын жазбасақ, онда factorial(0) factorial(-1)-ді шақырады, ал factorial(-1) factorial(-2)-ні шақырады және т.с.с. 2) Дұрыс емес параметрлі рекурсивті функцияны шақыру. Мысалы, егер factorial(n) функциясы factorial(n) шақырса, онда тура солай сияқты шексіз функция пайда болады. Рекурсия Нәтижесі: 120
  • 14. Мысалы, Фибоначчидін n-ші санын екі түрімен есептеу. Циклды қолданып n-ші санын есептеу: Алгоритмі: 1. Тізбектін алғашқы екі (fib1 және fib2) мәнін енгізу. 2. Анықталатын элементтін нөмірін енгізу (n) 3. Төмене көрсетілген әрекеттерді екі бірлікке азайтылған (өйткені fib1 және fib2 белгілі) n рет қайталау. 3.1. fib1 және fib2 қосу, және оны үшінші (fib_sum) айнымалыға меншіктеу. 3.2. Алғашқы мәндерін ауыстыру керек: fib1=fib2, ал fib2=fib_sum Рекурсияны қолданып n-ші санын есептеу: Алгоритмі: 1. Егер n=1 немесе n=2, онда шақырылатын тармағына бір бірлікті қайтару (себебі, Фибоначчи тізбегінің бірінші және екінші элементтері бірге тең). 2. Қалған басқа жағдайларды сол функцияны n-1 және n-2 аргументімен қайта шақыру. Екі шақырудың нәтижесін қосып, оны программанын шақырылатын тармаққа қайтару керек.
  • 15. Python тілінде жазылуы: Тексеріс үшін Фибоначчи сандары: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,… fib1 = 1 fib2 = 1 n = input (“Фибоначчидін қай n-ші санын есептейсіз? ") n = int(n) # бүтір санға түрлендіру i = 2 while i < n: fib_sum = fib2 + fib1 fib1 = fib2 fib2 = fib_sum i += 1 print (fib_sum) def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1) print(factorial(5))