You are on page 1of 65

 Përkufizim: Funksioni është një bashkësi

shprehjesh që janë grupuar së bashku dhe i


është dhënë një emër.
 Qëllimi: të kryejë një detyrë të caktuar, psh
gjen shumën e 2 numrave. Sa herë na duhet
të kryejmë shumën e 2 numrave përdorim
këtë funksion.
 Funksionet ndahen në:
◦ Të gatshme (built-in): deri tani kemi parë printf( ),
scanf( ); getchar( ); getche( ); etj.
◦ Të ndërtuar nga programuesi: deri tani ne kemi
ndertuar vetë vetëm funksionin main ( )
 Arsyeja kryesore që ka çuar në krijimin e
funksioneve, ka qënë nevoja për të shmangur
përsëritjen e kodeve.
 Në një program keni shkruar disa instruksione
për llogaritjen e rrënjës katrore të një numri.
 Nqs më vonë në këtë program do të duhej të
llogarisni rrënjën katrore të një numri tjetër, do
t’ju duhej të shkruani përsëri të njëjtat
instruksione.
 Funksionet mundësojnë të ekzekutohen
përsëri ato instruksione pa qënë nevoja që t’i
shkruajmë sërish.
 Përdorimi i funksioneve thjeshton organizimin e
programit.
 Funksionet na mundësojnë ta ndajmë një program
në disa pjesë më të vogla që janë më të thjeshta për
t’u kuptuar dhe testuar. Kodi është më i qartë dhe i
strukturuar.
 Nëse duam t’i bëjmë një ndryshim funksionit
mjafton ta reflektojmë vetëm në trupin e funksionit.
Në mungesë të tij, do të duhej që ndryshimi të
bëhet kudo ku ai ndryshim nevojitet në kod.
 Një tjetër veçori e rëndësishme e këtyre programeve
është pavarësia e variablave.
 Variablat e çdo funksioni janë të “pakapshëm” nga
funksionet e tjera, përfshi këtu dhe funksionin
main(). Më shumë për këtë në vijim te variablat
lokalë dhe globalë.
 Mundëson përdorimin e funksioneve të
gatshme që i kanë krijuar të tjerë ose vetë
programuesi më përpara.
 Për këtë vijnë në ndihmë libraritë, që janë një
bashkësi funksionesh të shkruara dhe
pasurohet nga programuesit me kohën.
Shembuj librarish: stdio.h, math.h, time.h, etj.
 Synimi: mos të ri-shpikim rrotën. Nëse dikush
e ka zgjidhur më parë pse të lodhemi ta
rizgjidhim?
 Kërkohet që në ekran të shfaqet si më poshtë:

 Realizoni zgjidhjen duke përdorur një funksion.


#include <stdio.h>
void kontur (void); /*prototipi i funksionit kontur() */
main (void)
{
printf("\n");
kontur(); /* vizaton një rresht me yje */
printf("\t PERSHENDETJE MIQ \n");
kontur(); /* vizaton rreshtin e dyte me yje */
}

void kontur (void) /* Përcaktimi i funksionit */


{
int i;
for (i=1; i<20; i++)
printf("* "); /* afishon 20 yje */
printf("\n"); /* kalon në rresht të ri */
}
 Në programi mesazh.c kemi dy funksione
 Siç e dimë main() është një funksion.
 Po kështu edhe kontur() është një funksion.
 Dallimi ndërmjet tyre është se main() është funksioni
që ekzekutohet i pari pavarësisht nëse është i pari
apo i fundit në kod.
 Në shembullin tonë funksioni main() thërret
funksionin kontur() .
 “Të thërrasësh” një funksion do të thotë “të shkaktosh
ekzekutimin e tij”
 Për të vizatuar dy rreshtat me yje në ekran, funksioni
main() thërret dy herë funksionin kontur()
 Elementët e një funksioni:
◦ Përcaktimi i funksionit -> përcaktimi i
instruksioneve që përbëjnë funksionin
◦ Thirrja e funksionit -> ekzekutimi i
funksionit.
◦ Prototipi i funksionit - deklaron
funksionin para se të përdoret.
I nevojshëm vetëm nëse përcaktimi i
funksionit ndodhet në kod pas thirrjes së
funksionit për herë të parë.
 Përcaktimi i funksionit –
rreshti 1: përmban emrin e funksionit
rreshtat vijues: trupi i funksionit që përmban të gjitha
instruksionet që përbëjnë funksionin, vendosur midis
kllapave { }.

 Struktura:
◦ tipi_kthimit emri_funksionit (parametra)
{
Trupi i funksionit
}
Emri i funksionit Parametrat.
Tipi i kthimit void dmth nuk ka
void dmth nuk kthen vlere

rreshti përcaktues ose


deklarues i funksionit
void kontur (void)
Përfundon pa ; {
int i;
for (i=1; i<20; i++) Trupi i funksionit
printf(“* ”);
printf(“\n”);
}
float mesatarja (float a, float b)
{
float s = a+b;
return (s/2);
}
 float: tipi i kthimit. Tipi i kthimit eshte vetem nje.
 a, b: parametrat e funksionit
 Parametri: variabel vlera e te cilit do te jepet kur
funksioni te thirret. Cdo parameter duhet ta kete tipin
e percaktuar.
 return:
kthen vlerën e përllogaritur.
kthen kontrollin tek pika ku u thirr funksioni.
 Funksionet nuk mund te kthejne matrica!!!
 Edhe nëse disa parametra janë të të njëjtit
tip, duhet përcaktuar tipi i secilit parametër.
Shembull:
double mesatarja (double a, b) //GABIM
{
return (a + b) / 2;
}
 Një variabël i deklaruar brenda funksionit,
ka kuptim vetëm brenda tij(variabel lokal)!
Jashtë e humbet vlerën!
1. float m = mesatarja (6, 2); //vlera konstante

2. float m = mesatarja (3+4*5, 2); //shprehje

3. float x = 5.2;
float y = 7.4;
float m = mesatarja (x, y); //variabla
 x, y: argumentat e funksionit
 Argumentat: i japin funksionit informacionin hyres
(Parametrat hyres ne percaktimin e funksionit quhen
argumenta ne thirrjen e tij, emrat e variablave mund te
jene te ndryshem, por tipi duhet i njejte)
 Argumentat mund te jene variabla, konstante, shprehje;
mjafton qe tipi i tyre te perputhet me tipin e parametrave
qe jane percaktuar gjate deklarimit te funksionit.
 printf (“Mesatarja: %f\n”, mesatarja (x, y));
 Thirrja e një funksioni është instruksioni që ekzekuton
funksionin.
 Mënyra si thirret funksioni: duke përdorur vetëm emrin
e funksionit ndjekur nga kllapat ( ).
 Janë pikërisht kllapat që i tregojnë kompilatorit se po i
referoheni një funksioni dhe jo një variabli.
 Thirrja e një funksioni është një instruksion si gjithë të
tjerët , kështu që duhet të mbarojë me pikëpresje: kontur();
 Ekzekutimi i këtij funksioni bën që kontrolli të kalojë në
funksionin kontur () dhe ndodh ekzekutimi me radhë i
instruksioneve në trupin e tij.
 Thirrja mund të ndodhë nga funksione të tjera si main() ose
edhe nga vetë funksioni.
 Përpara se të përdoren , funksionet në gjuhën C duhen
deklaruar.
 Prototipi i funksionit është deklarimi i tij.
 Në programin mesazh.c , përpara funksionit main()
është bërë deklarimi i funksionit kontur() me ndihmën e
instruksionit
void kontur (void); /*prototipi i funksionit*/
 Shihet që prototipi ka një formë të njëjtë me rreshtin e
parë të pjesës së përcaktimit të tij, me përjashtim të
faktit që ky instruksion përfundon me pikëpresje. Njihet
si varianti i shkurtuar i përcaktimit të funksionit (ka
vetëm rreshtin 1 të tij).
 Cili është qëllimi i tij?
Dimë se të gjithë variablat para se të përdoren duhen
deklaruar duke përcaktuar emrin dhe tipin e tyre.
Njëlloj, duhet deklaruar edhe funksioni para se ai të
thirret. (Nuk nevojitet vetëm nqs përcaktimi ndodhet në
kod përpara thirrjes së funksionit.)
 Deklarimi i funksionit, pra prototipi i tij i
tregon kompilatorit :
◦ emrin e funksionit
◦ tipin e të dhënës që ai kthen (nëse kthen
një vlerë)
◦ numrin dhe tipin e argumentave (nëse ka të
tillë)
 Prototipet e funksioneve në përgjithësi
vendosen në krye të programit në mënyrë që
ata të njihen nga gjithë funksionet e tjerë në
kod.
 Ndryshe nga funksionet e tjera funksioni
main() nuk ka nevojë që të deklarohet.
 Një gjë e tillë është e lejueshme, por për hir
të specifikave që ai ka, nuk është e
domosdoshme.
 Funksioni main ekzekutohet gjithmonë i pari
pavarësisht se në program mund të kemi dhe
funksione të tjera.
Cdo parameter pas
thirrjes se funksionit
mban nje kopje te
vleres se argumentit;
prandaj vlera e
argumentit nuk mund
te ndryshoje nga
thirrja e funksionit.
 Variablat mund të jenë:

◦ Variabla Lokal, i perdorshem vetem brenda


funksionit ku ai eshte deklaruar

◦ Variabla Global, deklarohet jashte te gjithe


funksioneve dhe eshte i perdorshem nga te gjithe
funksionet
 Një variabël që deklarohet brenda një funksioni
është variabël lokal i atij funksioni.
 Shtrirja e këtij variabli është që nga deklarimi e derisa
mbyllet trupi i funksionit.
 Nuk ka konflikt me emrat e variablave tek funksionet
e tjerë.
 Kur funksioni mbyllet, zona e kujteses ku ishte
variabli lokal i atij funksioni dealokohet.
 Në funksionin kontur(), variabli i është një variabël
lokal dhe është i padukshëm për funksionin main().
 Nqs do të shtohej në funksionin main() instruksioni:
printf(“%d”, i);
 pa deklaruar përsëri në të variablin i, kompilatori do
të sinjalizonte gabim, meqë për funksionin main()
variabli i është i panjohur.
 Shpesh herë lind nevoja që një variabël të njihet
nga të gjitha funksionet dhe jo vetëm nga një.
 Kalimi i argumentave në funksion është një
mënyrë për të transmetuar informacion tek ai.
Për këtë mund të përdoren edhe variabla globalë.
 Variablat globalë nuk deklarohen brenda një
funksioni të caktuar, por jashtë të gjithëve.
 Ato mund të aksesohen dhe te modifikohen nga
të gjithë funksionet që janë deklaruar në të
njëjtin program.
#include <stdio.h>
void tekcift ( ); /*prototipet e funksioneve */
void negativ ( );
int numri; /* variabël global*/
main( )
{
printf(“\nShtypni një numër: “);
scanf(“%d”, &numri);
tekcift();
negativ();
}
void tekcift ( ) /* funksioni teston çiftësinë e variablit numri */
{
if (numri % 2 ) /*përdorimi i variablit global */
printf(“Numri është tek.\n”);
else
printf(“Numri është çift.\n”); }
void negativ ( ) /* funksioni teston nëse numri është negativ */
{
if (numri <0) /* përdorimi i variablit global */
print(“Numri është negativ.\n”);
else
printf(“Numri është pozitiv.\”); }
 Në këtë program, të tre funksionet: main(),
tekcift() dhe negativ() i adresohen variablit
numri.
 Për të bërë të mundur një gjë të tillë duhet
që ky variabël të deklarohet jashtë të gjitha
funksioneve përfshirë këtu edhe funksionin
main().
 Funksionet qe perdorin variabla globale, eshte veshtire te
riperdoren. Çfare do te printohet kur thirret funksioni
printo_gjithe_rreshtat?

int i; //variabel global


void printo_rresht () {
for (i = 1; i<=10; i++)
printf(“*”); //del nga cikli per i=11
}
void printo_gjithe_rreshtat (){
for (i = 1; i<=10; i++){
printo_rresht ();
printf(“\n”);
}
}
Çfare do te printohej?
Vetem nje rresht me 10 yje! Pse?
Sa eshte vlera e i-se kur dilet nga funksioni printo_rresht?
 Theksojmë se është e rrezikshme që të
përdoren vend e pa vend variablat globalë. Ja
disa arsye pse nuk këshillohet:
◦ Variablat globalë nuk janë të mbrojtur nga
ndryshimi aksidental që mund tu bëhet në
funksione të ndryshme.
◦ Variablat globalë nuk janë aq efikasë në përdorimin
e memories sa variablat lokalë.
 Deklaroni një variabël global vetëm kur nuk
keni tjetër rrugëzgjidhje.
i = 1;
// i referohet deklarimit 2
i> 0
// i referohet deklarimit 3
i = 3;
// i referohet deklarimit 4
i = 4;
// i referohet deklarimit 3
i = 5;
// i referohet deklarimit 1
Rregull: Kur nje deklarim
brenda nje blloku emertohet
me nje identifikues qe ishte i
dukshem ne ate bllok;
deklarimi i ri e “fsheh”
deklarimin e vjeter.
Ne fund te bllokut identifikuesi
ri-merr kuptimin e vjeter.
 Funksionet që kthjenë një vlerë janë
funksione që pas ekzekutimit kthejnë një
vlerë të caktuar me anë të fjalës kyce return.
 Funksioni i gatshëm getche( ) kthen si vlerë
karakterin e shtypur nga tastjera.
 Edhe funksionet e ndërtuara nga ne mund të
ndërtohen që të kthejnë një vlerë të caktuar.
 Të ndërtojmë një funksion i cili jo vetëm të kthejë
si vlerë një karakter, siç bën funksioni getche(),
por që gjithashtu të bëjë ndërrimin automatik të
karakterit të shtypur nga shkronjë e madhe në
shkronjë të vogël.
#include <stdio.h> /* përfshin funksionin printf() */
#include <conio.h> /* përfshin funksionin getche() */
char shvogel(void); /* prototipi i funksionit */
main (void)
{
char ch;
printf(“\nShtyp nje shkronje te madhe”);
ch=shvogel();
printf(“ Ju shtypet %c”,ch);
} /* fundi i funksionit main */
/*Funksioni shvogel () konverton shkronjën e shtypur */
/* në shkronjë të vogël nëse ajo është e madhe */
char shvogel (void)
{
char ch;
ch= getche();
if (ch>64 && ch<91) /*nqs është shkronjë e
madhe*/
ch=ch + 32; /* shtojmë 32 për ta konvertuar */
return (ch); /* kthen shkronjën e konvertuar */
}
 Funksioni shvogel() kthen një vlerë të tipit char. Ky
funksion thirret në instruksionin : ch = shvogel();
 Njelloj si funksioni getche(), pas ekzekutimit ai
kthen një vlerë e cila i kalohet variablit ch
 Si veprohet?
◦ thirret dhe ekzekutohet funksioni shvogel()
◦ vlerën e kthyer (shkronjën e vogël ) ia kalon
variablit ch
 Vlera ch më pas përdoret si argument në
funksionin printf().
 Instruksioni return kthen vlerën e llogaritur nga
funksioni.
 Instruksioni return ka dy funksione:
◦ Ekzekutimi i tij përfundon funksionin dhe kalon
kontrollin në instruksionin që pason instruksionin
“thirrës” të funksionit.
◦ Vlera brenda kllapave të instruksionit return është vlera
që kthen funksioni.
 Instruksioni return mund të vendoset kudo në trupin e
funksionit (pra jo vetëm në fund).
 Instruksioni return mund të përdoret gjithashtu dhe nëse
funksioni nuk kthen vlerë. Në një rast të tillë ai përdoret i
vetëm, pa kllapa dhe pa emer variabli.
 Theksojmë se return mund të kthejë vetëm një vlerë ( jo
matricë). Dhe funksioni mund të kthejë vetëm një vlerë.
 Të ndërtohet një program i cili llogarit
diferencën në minuta ndërmjet dy kohëve të
lexuara nga përdoruesi. Leximi i kohës të
realizohet nëpërmjat një funksioni.
 Ky është shembull i një funksioni që kthen
një vlerë të tipit integer
#include <stdio.h>
int koha(void); /* deklarimi i funksionit koha() */
void main(void)
{
int min1, min2; /* minutat */
printf(“\nJepni orën e parë(në formën o:m):”);
min1 = koha(); /* kthen minutat */
printf(“Jepni përsëri orën:”);
min2 = koha(); /* kthen minutat */
printf(“Diferenca është %d minuta.”, min2-min1 );
}
/*funksioni koha() lexon orën e shkruar nga përdoruesi
në formatin o:m dhe kthen në funksionin main () orën
në minuta */
int koha(void)
{
int orët, minutat;
scanf(“%d:%d”, &oret, &minutat);
return (oret*60 + minutat); / * konverton në minuta*/
}
 Ekzekutimi i programit:
Jepni orën e parë (në formën o:m): 6:00
Jepni orën përsëri: 7:45
Diferenca është 105 minuta
#include <stdio.h>
void histogram(int); /* prototipi i funksionit */
void main(void)
{
printf(“Ardiana\t”); /* afishon emrin */
histogram (8); /* thërret funk. me argument 28 */
printf(“Teuta\t”);
histogram (5);
printf(“Eneida\t”);
histogram (12);
printf(“Eris\t”);
histogram (7);
printf(“Najada\t”);
histogram (3);
}
/* histogram() funk. Vizaton një vizë horiz. të
përbërë ‘num’ karaktere grafike ( = )*/
void histogram (int num)/* përcaktimi i funksionit*/
{
int i;
for(i=1; i<=num; i++) /*vizaton ‘num’ karaktere= */
printf(“\xCD”);
printf(“\n”); /*kalon në rreshtin tjetër */
}
 Ekzekutimi i këtij programi do të afishonte në ekran:
Adriana ========
Teuta =====
Eneida ============
Eris =======
Najada ===

Pra në këtë program funksioni histogram() ndërton


në ekran, në krah të emrit të çdo personi një vijë të
përbërë nga karakteret grafike (=), me gjatësi sa
vlera e argumentit të funksionit.
 Vlera 39 kalon në variablin num të
funksionit
 Të modifikojmë programin në shembullin 5
dhe të mos kalojmë si argument një numër
konstant por një variabël.
#include <stdio.h>
void histogram (int num); /*prototipi i funksionit */
void main(void)
{ int piket=1;
printf(“\n”);
while (piket !=0) /*dalim kur piket=0 */
{ printf(“Piket=“);
scanf(‘%d”, &piket);/*lexon pikët*/
histogram (piket); /*thërret funksionin */
}
}
/*histogram() vizaton vijën ‘num’karaktere të gjatë*/
void histogram (int numpike)
{
int i;
for (i=1; i<=numpike;i++)/*vizaton ‘numpike’*/
printf(“\xCD”); /* karaktere =*/
printf(“\n”);
}
 Në këtë program funksioni histogram() është i njejtë si në
programin graf1.c, ndërkohë që funksioni main() është
modifikuar me qëllim që të pranojë futjen e pikëve nga
përdoruesi në momentin e ekzekutimit të programit.
 Meqenëse vlera që do të kalojmë si argument në
funksionin histogram() është e panjohur për ne,
thirrja e tij nuk mund të bëhet duke përdorur si
argument një numër konstant por një variabël.
histogram (piket) ;
 Më poshtë po paraqesim një shembull të bashkëveprimit të
programit me përdoruesin
Pikët =10
==========
Pikët =23
=======================
Pikët =17
=================
Pikët =30
==============================
 Vemë re se kemi përdorur emra të ndryshëm për
argumentat: piket në funksionin thirrës main() dhe
numpike në funksionin e thirrur histogram().
 Mund të kishim përdorur fare mirë të njejtin emër
për të dy variablat pasi ata konsiderohen nga
kompilatori si variabla të ndryshëm meqë ndodhen
në funksione të ndryshme.
 Argumentin në funksionin thirrës do ta quajmë
“argument aktual” kurse atë të funksionit të thirrur
“argument formal”.
 Një funksion mund të pranojë jo vetëm një,
por disa argumente.
 Programi drejtknd.c, përmban funksionin
drejtkendesh() i cili për të vizatuar një
drejtkëndësh në ekran, kërkon dy argumenta:
gjatësinë dhe gjerësinë e drejtkëndëshit.
/* drejtknd.c vizaton në ekran disa drejtkëndësha */
#include <stdio.h>
void drejtkendesh(int, int); /* prototipi i funksionit */
void main(void)
{
printf(“\nDrejtkëndëshi I\n”);
drejtkendesh (16,8);
printf(“\nDrejtkëndëshi II\n”);
drejtkendesh (4,4);
printf(“\nDrejtkëndëshi III\n”);
drejtkendesh (8,10);
printf(“\nDrejtkëndëshi IV\n”);
drejtkendesh (6,8);
printf(“\nDrejtkëndëshi V\n”);
drejtkendesh (6,3);
} /*fundi i funksionit main() */
/* funksioni drejtkendesh vizaton në ekran një */
/* drejtkëndësh me përmasa ‘gjatësi’ dhe ‘gjerësi’ */
void drejtkendesh(int gjatesi, int gjeresi)
{
int i, j;
gjeresi /= 2; /* shkalla e zvoglimit vertikale */
for (i=1; i<=gjeresi; i++) /* numri i rreshtave */
{
printf(“\t\t”);
for ( j=1; j<=gjatesi; j++) /* gjatësia */
printf(“\xDB”);
printf(“\n”);
}
} /*fundi i funksionit drejtkendesh() */
 Pas ekzekutimit të këtij programi në ekran afishohet

Drejtkëndëshi I

Drejtkëndëshi II

Drejtkëndëshi III

Drejtkëndëshi IV

Drejtkëndëshi V
 Në një program mund të përdoren aq funksione sa janë të
nevojshme dhe secili nga funksionet mund të thërrasë cilindo
nga funksionet e tjerë
 Në gjuhën C çdo funksioni mund t’i referohemi nga secili prej
funksioneve të tjerë
 Në gjuhën C të gjitha funksionet , përfshirë dhe funksionin
main(), kanë të njëjtin status dhe janë të “kapshëm” nga të
gjithë funksionet e tjerë

Funksioni 1 Funksioni 2

Funksioni 3
 Programin shumefunksione.c përbëhet nga
disa funksione.
 Ky program llogarit shumën e katrorëve të dy
numrave të shtypur nga përdoruesi me
ndihmën e tre funksioneve shumakatroreve(),
katroret(), shuma()
#include <stdio.h>
#include <math.h> /*përfshin funksionin sqrt() */
int shuma (int, int); /* prototipet e funksioneve */
int katror (int);
int shumakatror (int, int);
void main (void)
{
int num1, num2;
printf(“\Shkruani dy numra: “);
scanf(“%d %d”, &num1, &num2);
printf(“Shuma e katrorëve është:%d”,
shumakatror(num1,num2));
}
/* Funksioni shumakatroreve() kthen shumën e katrorëve
të dy argumentëve */
int shumakatroreve (int j, int k)
{
return (shuma(katror(j), katror(k) ) );
}
/*Funksioni katroret () kthen katrorin e një numri */
int katror (int z)
{
return (z * z);
}
/* Funksioni shuma () kthen shumën e argumentëve
*/
int shuma(int x, int y)
{
return (x + y);
}
 Në këtë program asnjeri nga funksionet nuk
ndodhet brenda një funksioni tjetër.
 Rradha e vendosjes së funksioneve në
program është e parëndësishme, ato mund
të vendosen në çfarëdo rendi që parapëlqen
programuesi.
 Eshtë një praktikë e mirë programimi që
funksionet të renditen në mënyrë të tillë që
të lehtësohet referimi ndaj tyre , sidomos kur
numri i tyre në program është i madh.
 Të ndërtohet një program në gjuhën C i cili
gjen dhe printon vlerën më të vogël dhe
vlërën më të madhe. Për gjetjen e tyre të
ndertohen dy funksione një për gjetjen e
vlerës më të vogël një për gjetjen e vlerës më
të madhe.
#include<stdio.h>
int vleraMax(int a, int b, int c);
int vleraMin(int a, int b, int c);

int main()
{
int a,b, c;
int min;
printf("Jepni tre vlerat a, b, c: ");
scanf("%d %d %d", &a, &b, &c);

printf("\nVlera Max = %d", vleraMax(a,b,c));

min=vleraMin(a,b,c);
printf("\nVlera Min = %d", min);
}
int vleraMax(int a, int b, int c)
{
int max=a;
if(max<b)
max=b;
if(max<c)
max=c;
return max;
}

int vleraMin(int a, int b, int c)


{
int min =a;
if(min>b)
min = b;
if(min>c)
min=c;
return min;
}
 Një funksion është rekursiv kur në trupin e tij ai
thërret vetveten.
 Shembull: funksioni që llogarit faktorialin e një
numri
int faktorial (int n)
{
if (n<=1)
return 1;
else
return n* faktorial(n-1);
}
 Ekzekutimi
i= faktorial(5);
 faktorial(5) gjen që 5 nuk është <= me 1; kështu therrët
 faktorial(4) gjen që 4 nuk është<= me 1; kështu thërret
 faktorial(3) gjen që 3 nuk është<= me 1; kështu thërret
 faktorial(2) gjen që 2 nuk është<= me 1; kështu thërret
 faktorial(1) gjen që1 është<= me 1; kthen1

 faktorial(2) kthen 2x1 = 2


 faktorial(3) kthen 3x2 = 6
 faktorial(4) kthen 4x6 = 24
 faktorial(5) kthen 5x24 = 120
 Gjithë funksionet rekursive duhet të kenë një “kusht
perfundimi” në mënyrë që të mos kemi rekursivitet të
pafundëm!
 Të ndërtohet një funksion që llogarit fuqinë e një
numri. Ndërtoni programin për thirrjen e
funksionit.
◦ Funksioni të jetë iterativ (përsëritës: for, while, do while)
◦ Funksioni të jetë rekursiv
 Të ndërtohet një funksion që llogarit faktorialin e
një numri në mënyrë iterative.
Ndërtoni programin për thirrjen e funksionit.

You might also like