You are on page 1of 6

• Caùc daïng ñeä qui:

Daïng toång quaùt xaây döïng haøm ñeä qui:


if ( tröôøng hôïp suy bieán)
{
trình baày caùch giaûi baøi toaùn
(giaû ñònh ñaõ coù caùch giaûi)
}
else /* tröôøng hôïp toång quaùt*/
{
goïi ñeä qui tôùi haøm (ñang laäp) vôùi
giaù trò khaùc cuûa tham soá
}
o Ñeä qui tuyeán tính:
<Kieåuhaøm> <teânhaøm>(ñoáisoá)
{
if( ñieàukieändöøngñuùng)
{ <leänh>;
return <giaùtrò>;
}
else {
<leänh>;
return <goïiñeäqui>;
}
Ví duï: 2 ví duï treân: n! vaø xn.
• Ñeä qui nhò phaân:
<Kieåuhaøm> <teânhaøm>(ñoáisoá)
{
if( ñieàukieändöøngñuùng)
{ <leänh>;
return <giaùtrò>;
}
else {
<thöïc hieän ñeä qui vôùi nöûa coâng vieäc coøn laïi>;
return <giaùtrò>;
}
Ví duï: Tính giaù trò phaàn töû thöù n cuûa daõy Fibonacci
…….
long fibonaci( long n)
{ long a1, a2;
if ( n = 0 || n = 1 )
return n;
else
{
a1= fibonaci(n-1);
a2= fibonaci(n-2);
return a1+ a2;
}
}
Ví duï: Tìm kieám moät soá x coù trong maûng a hay khoâng? (tìm kieám nhò phaân)
……
int timkiemnhiphan(int t, int p, int x, int *a)
{ int m;
if(t>p) return 0;
else
{ m=(t+p)/2;
if(x==a[m] return 1;
else if(x<a[m]) return timkiemnhiphan(t, m-1, x, a);
else if(x>a[m]) return timkiemnhiphan(m+1,p, x, a);
else return 0;
}
}

o Ñeä qui phi tuyeán: Lôøi goïi ñeä qui xuaát hieän trong voøng laëp
<Kieåuhaøm> <teânhaøm>(ñoáisoá)
{
if( ñieàukieändöøngñuùng)
return <giaùtrò>;
else
{
for…
<goïi ñeä qui>;
return <giaùtrò>;
}
}
Ví duï: Tính:
x(0)=1 vôùi n=0;
x(n)=n2x(0)+(n-1)2+…..+12x(n-1) vôùi n>0;
…..
int x(int n)
{
if(n==0) return 1;
else
{ int t=0;
for( int i=0; i<n;i++)
t=t+(n-i)*(n-i)*x(i);
return t;
}
}
o Ñeä qui hoã töông: Hai haøm goïi laãn nhau.
Haøm1( )
{
<goïi Haøm2( )>
}
Haøm2( )
{
<goïi Haøm1( )>
}
Ví duï: Tính x(n) vaø y(n)
x(0)=y(0)=1
x(n)=x(n-1)+y(n-1)
y(n)=n2x(n-1)+y(n-1)
…..
int x(int n)
{
if(n==0) return 1;
else return x(n-1) + y(n-1);
}

int y(int n)
{
if(n==0) return 1;
else return n*n*x(n-1) + y(n-1);
}

❖ Moät vaøi öùng duïng cuûa ñeä qui:


• Öôùc soá chung lôùn nhaát cuûa hai soá nguyeân döông x vaø y
int usc(int x, int y)
{
if (x==y) return x;
else
if (x>y) return usc(x-y,y);
else return usc(x,y-x);
}

• Tính toång: S=1+2+3+...+n


int tongs(int n)
{
if (n==1) return 1;
else return n+tong(n-1);
}
• Tính caùc phaàn töû cuûa tam giaùc Pascal.
int nhithuc(int n,int p)
{
if(p==1 || p==n) return 1;
else return(nhithuc(n-1,p-1)+nhithuc(n-1,p));
}
• Tìm soá lôùn nhaát trong maûng nguyeân
int chisolonnhat(int a[], int n)
{
int csmax;
if (n<1) csmax=-1;
else if(n==1) csmax=0;
else
{
csmax =chisolonnhat(a,n-1);
if (a[csmax]<a[n-1]) csmax=n-1;
}
return csmax;
}
• Saép xeáp maûng taêng daàn
void sapxep(int a[], int n)
{
int t;
if(n>1)
{
sapxep(a,n-1);
if (a[n-2]>a[n-1])
{
t=a[n-2];
a[n-2]=a[n-1];
a[n-1]=t;
sapxep(a,n-1);
}
}
}
• Ñeám caùc phaàn töû khaùc nhau trong maûng
int cotrong(int a[], int n, int x)
{
int i=0;
while (i<n &&x!=a[i]) i++;
return (i<n);
}

int dempb(int a[], int n)


{
int kqua, dem;
if(n<1) kqua=0;
else if(n==1) kqua=1;
else
{
dem=dempb(a,n-1);
if (cotrong(a,n-1,a[n-1])) kqua=dem;
else kqua=dem+1;
}
return kqua;
}

• Quicksort
Caøi ñaët:
void Sort(int *a,int left,int right)
{
int i=left,j=right,x=a[(left+right)/2];
if(left>=right) return;
while (i<j)
{
while (i<j&&a[i]<x) {i++;ss++;}
while (i<j&&a[j]>x) {j--;ss++;}
if (i<j)
{ if(a[i]==a[j]) goto xong;
Hoanvi(a[i],a[j]);
xong:
i++;
j--;
}
}
if (j<i) swap(&i,&j);
Sort(a,left,i);
i= i = = left ? i+1 : i;
Sort(a,i,right);
}
void QuickSort(int *a,int n)
{
Sort(a,0,n-1);
}
{*******
void QuickSort(int a[ ], int l, int r)
{
int i,j;
int x;
x=a[(l+r)/2]; //choïn phaàn töû x laø khoùa
i=l; j=r;
do{
while(a[i]<x) i++;
while(a[j]>x) j--;
if(i<=j){
Hoanvi(a[i], a[j]);
i++; j--;
}
}while(i<j);
//tieáp tuïc phaân hoaïch caùc daõy con baèng phöông phaùp ñeä quy
if(l<j) QuickSort(a,l,j);
if(i<r) QuickSort(a,i,r);
}
o

You might also like