Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
Rezolvare: Rezolvare:
dati n6 dati n8
sirul fibonaci este1 sirul fibonaci este1
sirul fibonaci este1 sirul fibonaci este2
sirul fibonaci este2 sirul fibonaci este3
sirul fibonaci este3 sirul fibonaci este5
sirul fibonaci este5 sirul fibonaci este8
sirul fibonaci este8 sirul fibonaci este13
sirul fibonaci este13 sirul fibonaci este21
sirul fibonaci este34
Programul n Pascal
Programul n C
#include<stdio.h> #include<stdio.h>
#include<conio.h> #include<conio.h>
#include<iostream.h> void main()
int fib(int k) {int f[10];
{if(k<2) return 1; int n,k;
return fib(k-1)+fib(k-2); clrscr();
} printf("dati n=");
void main() scanf("%d",&n);
{int n,k; f[0]=1;f[1]=1;
clrscr(); for(k=2;k<n;k++)
printf("datin n"); f[k]=f[k-1]+f[k-2];
scanf("%d",&n); printf('sirul fibonacci este");
printf("sirul fibonacci este"); for(k=0;k<n;k++)
for(k=0;k<n;k++) printf("\n%d",f[k]);
printf("\n%d",fib(k)); getch();
getch(); }
} Rezolvare:
Rezolvare: datin n=5
datin n5 sirul fibonacci este
sirul fibonacci este 1
1 1
1 2
2 3
1
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
3 5
5
Problema 2: Master 2012
S se elaboreze un program care afieaz urmtorul ir 1,1,2,3,7,25,
Programul in Pascal
program p2_recursiv; program p2_nerecursiv;
uses crt; uses crt;
var n,k:integer; var a:array[1..100] of integer;
function a(n:integer):integer; n,k:integer;
begin begin
if (n=0) or (n=1) then a:=1 clrscr;
else if (n=2) then a:=2 write('dati n');
else readln(n);
a:=a(n-1)*a(n-2)+a(n-3); a[1]:=1;
end; a[2]:=1;
begin a[3]:=2;
clrscr; for k:=4 to n do
write('dati n'); a[k]:=a[k-1]*a[k-2]+a[k-3];
readln(n); for k:=1 to n do
for k:=0 to n do writeln('sirul dat este',a[k]);
writeln('sirul este',a(k)); readkey;
readkey; end.
end. Rezolvare:
Rezolvare: dati n5
dati n6 sirul dat este1
sirul este1 sirul dat este1
sirul este1 sirul dat este2
sirul este2 sirul dat este3
sirul este3 sirul dat este7
sirul este7
sirul este23
sirul este164
Programul in C
#include<stdio.h> #include<stdio.h>
#include<conio.h> #include<conio.h>
#include<iostream.h> #include<iostream.h>
int f(int n) void main()
{ {int a[20];
if(n<2) return 1; int n,k;
if(n==2) return 2; clrscr();
if(n>2) printf("dati n=");
return f(n-2)*f(n-1)+f(n-3); } scanf("%d",&n);
void main() a[0]=1; a[1]=1; a[2]=2;
{int n,k; for(k=3;k<n;k++)
clrscr(); a[k]=a[k-1]*a[k-2]+a[k-3];
printf("datin n"); printf("sirul dat este");
scanf("%d",&n); for(k=0;k<n;k++)
printf("sirul dat este"); printf("\n%d",a[k]);
for(k=0;k<n;k++) getch();
printf("\n%d",f(k)); }
getch(); Rezolvare:
} dati n=4
Rezolvare: sirul dat este
datin n4 1
sirul dat este 1
1 2
1 3
2
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
2
3
Problema 3: iruri de numere
S se calculeze suma elementelor din irul 1,5,9,13,17,21,,4n-3,
Program Pascal
program p3_recursiv; program p3_nerec;
uses crt; uses crt;
var n,k:integer; var s,n,k,t:integer;
function suma(n:integer):integer; begin
begin writeln(dati n=);
if(n=0) then suma:=0 readln(n);
else suma:=suma(n-1)+4*n-3; s:=0;
end; k:=1;
begin t:=4*n-3;
clrscr; while k<=t do begin
write(dati n); s:=s+k;
readln(n); k:=k+4;
writeln(suma este,suma(n)); end;
readkey; write(suma este=,s);
end. readkey;
Rezolvare: end.
dati n5 Rezolvare:
suma este45 dati n=3
suma este=15
Program C
#include<iostream.h> #include<stdio.h>
#include<stdio.h> #include<conio.h>
#include<conio.h> void main()
int suma(int n) {
{if(n==0) return 0; int n,k,sum;
return (suma(n-1)+4*n-3); clrscr();
} printf("dati n=");
void main(); scanf("%d",&n);
{int n; sum=0;
clrscr(); if(n>=1)
printf("dati n"); for(k=1;k<=n;k++)
scanf("%d",&n); {sum=sum+(4*k-3);
printf("suma sirului este");
printf("\n%d",suma(n)); printf("suma sirului este");
getch(); printf("\n%d",sum);
} getch();
Rezolvare: }
dati n5 Rezolvare:
suma sirului este45 dati n=3
suma sirului este15
Programul Pascal
program p4_rec; program p4_nerec;
uses crt; uses crt;
var n,k:integer; var s,n,k,t:integer;
3
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
Programul C
#include<iostream.h> #include<stdio.h>
#include<stdio.h> #include<conio.h>
#include<conio.h> void main()
int suma(int n) {
{if(n==0) return 1; int n,k,sum;
return (suma(n-1)+5*n+1); clrscr();
} printf("dati n=");
void main(); scanf("%d",&n);
{int n; sum=0;
clrscr(); if(n>=1)
printf("dati n"); for(k=0;k<=n;k++)
scanf("%d",&n); {sum=sum+(5*k+1);
printf("suma sirului este"); printf("suma sirului este");
printf("\n%d",suma(n)); printf("\n%d",sum);
getch(); getch();
} }
Rezolvare: Rezolvare:
dati n4 dati n=5
suma sirului este34 suma sirului este55
Programul Pascal
program p5_recursiv; program p5_nerec;
uses crt; uses crt;
var a,b:integer; var a,b,a1,b1:integer;
function cmmdc(a,b:integer):integer; begin
begin clrscr;
if a=b then cmmdc:=a write('dati a,b=');
else if a>b then cmmmdc:=cmmdc(a-b,b) read(a,b);
else if a<b then cmmdc:=cmmdc(a,b-a); a1:=a;
end; b1:=b;
begin while a<>b do
clrscr; if a>b then a:=a-b
write('dati a si b'); else b:=b-a;
read(a,b); writeln('cmmdc(',a1,';',b1,')=',a);
4
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
Programul C
#include<conio.h> #include<conio.h>
#include<stdio.h> #include<stdio.h>
int cmmdc(int a,b) int a,b,a1,b1;
{ int main()
if(a==b) return a; {
else if(a>b) return cmmdc(a-b,b); clrscr();
else if(a<b) return cmmdc(a,b-a); cout << "introdu a:";
} cin >> a1; a=a1;
void main() cout << "introdu b:";
{ cin >> b1; b=b1;
int a,b; a1=a;
printf("dati 2 numere"); b1=b;
scanf("%d",&a); while (a!=b)
scanf("%d",&b); {if (a>b) a=a-b;
printf("cmmdc=%d",cmmdc(a,b)); else b=b-a;
getch(); }
} cout<<cmmdc este=<<a;
Rezolvare: getch();
dati 2 numere 45 }
15 Rezolvare:
cmmdc(a;b)=15 introdu a:45
introdu b:15
cmmdc este=15
Fie date 5 numere a, b i c ntregi. Se cere de aflat cel mai mare divisor comun a numerelor date aplicnd algoritmul
lui Euclid.
5
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
writeln('cmmdc(cmmdc(',a,';',b,');',c,')=', ENd.
cmmdc(cmmdc(a,b),c)); Rezolvare:
readkey; introdu a:
end. 45
Rezolvare: introdu b:
dati a ,b si c 33
45 introdu c:
33 6
6 NOD(45,33,6)=3
cmmdc(cmmdc(45;33);6)=3
Programul C
#include<stdio.h> #include <iostream.h> // NEREC
#include<conio.h> #include <conio.h>
#include<iostream.h> #include <stdio.h>
int cmmdc(int a,int b) int a,b,c,a1,b1,c1;
{ if(a==b) return a; int main()
else if (a>b) return cmmdc(a-b,b); {
else return cmmdc(a,b-a); clrscr();
} cout << "introdu a:";
void main() cin >> a1; a=a1;
{ cout << "introdu b:";
int a,b,c; cin >> b1; b=b1;
clrscr(); cout << "introdu c:";
cout<<"dati 3 numere"; cin >> c1; c=c1;
cin>>a>>b>>c; while (a!=b)
cout<<"cmmdc este="<<cmmdc(cmmdc(a,b),c); {if (a>b) a=a-b;
getch(); else b=b-a;
} }
Rezolvare: while (a!=c)
dati 3 numere45 {if (a>c) a=a-c;
255 else c=c-a;
125 }
cmmdc este=5 if ((a>0) && (b>0) && (c>0))
cout<<"NOD("<<a1<<","<<b1<<","<<c1<<")="<<a;
return 0;
getch();
}
Rezolvare:
introdu a:2
introdu b:4
introdu c:6
NOD(2,4,6)=2
g (x) 2, x 1 f (x) 1, x 0
f ( x) g ( x)
x 2, x 1 x , x 0
program recurs; #include<stdio.h>
uses crt; #include<conio.h>
var x:integer; int g(int);
function f(x:integer):integer; int f(int x);
forward; {if(x>1) return g(x)-2;
function g(x:integer):integer; else return x+2;
begin }
if (x>=0) then g:=(-x)+1 else g:=-x int g(int x)
end; {
6
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
x , x 3
2
( x 1) , x 0
2 3
x , x 0
a( x) c( x 2),3 x 6 b( x) c(1) 1, 0 x 5 c( x) b( x 1),0 x 5
b( x 2), x 6 a( x) 5, x 5 a( x 1), x 5
program recurs; #include<stdio.h>
uses crt; #include<conio.h>
var x:integer; int a(int);
function a(x:integer):integer; int b(int);
forward; int c(int x)
function b(x:integer):integer; {
forward; if (x<=0) return x*x*x;
function c(x:integer):integer; else if (x<5) return b(x+1);
begin else return a(x+1);
if (x<=0) then c:=x*x*x else }
if (x<5) then c:=b(x+1) else c:=a(x+1); int b(int x)
end; {
function b; if (x<=0) return (x+1)*(x+1);
begin else if (x<5) return c(-1)-1;
if x<=0 then b:=(x+1)*(x+1) else else return a(x)+5;
if (x<5) then b:=c(-1)-1 }
else b:=a(x)+5; int a(int x)
end; {
function a; if(x<=3) return x*x;
begin else if(x<6) return c(x-2);
if x<=3 then a:=x*x else
else return b(x-2);
if x<6 then a:=c(x-2) }
else a:=b(x-2); void main()
end; {
begin int x;
clrscr; clrscr();
writeln('dati x'); printf("introdu x");
readln(x); scanf("%d",&x);
writeln('a(x)=',a(x)); printf("a(%d)=%d \n",x,a(x));
writeln('b(x)=',b(x)); printf("b(%d)=%d \n",x,b(x));
writeln('c(x)=',c(x)); printf("c(%d)=%d \n",x,c(x));
readkey; getch();
end. }
7
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
Rezolvare: Rezolvare:
dati x introdu x3
6 a(3)=9
a(x)=-2 b(3)=-2
b(x)=3 c(3)=-2
c(x)=3
8
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
n 1, m 0
a(m, n) a(m 1,1), n 0
a(m 1, a(m, n 1)), m 0and n 0
program recurs; #include<stdio.h>
uses crt; #include<conio.h>
var n,m:integer; int ack(int m,int n)
function ack(m,n:integer):integer; {
begin if(m==0) return n+1;
if m=0 then ack:=n+1 else if (n==0) return ack(m-1,1);
else if n=0 then ack:=ack(m-1,1) else return ack(m-1,ack(m,n-1));
else ack:=ack(m-1,ack(m,n-1)); }
end; void main()
begin {
clrscr; int m;int n;
writeln('dati m,n'); printf("introdu m si n");
readln(m,n); scanf("%d,%d",&m,&n);
writeln('ack(m,n)=',ack(m,n)); printf("ack(%d,%d)=%d",m,n,ack(m,n));
readkey; getch();
end. }
Rezolvare: Rezolvare:
dati m,n introdu m si n2
21 1
ack(m,n)=5 ack(2,1)=5
Problema 11
S se elaboreze un program care citete de la tastatur numerele naturale m, n i afieaz pe ecran valoarea funciei
lui Hermite:
1, n 0
H n ( x ) x, n 1
H ( x) (n 1) H ( x), n 2
n1 n2
program p11; #include<stdio.h>
uses crt; #include<conio.h>
var n,x:integer; int h(int n,int x)
function h(n,x:integer):integer; {
begin if(n==0) return 1;
if n=0 then h:=1 else
else if n=1 then h:=x if(n==1) return x;
else h:=h(n-1,x)-(n-1)*h(n-2,x); else return h(n-1,x)-(n-1)*h(n-2,x);
end; }
begin void main()
clrscr; {
write('dati n si x'); int n;int x;
read(n,x); clrscr();
write('h(',n,';',x,')=',h(n,x)); printf("introdu n ");
readkey; scanf("%d",&n);
end. printf("introdu x ");
scanf("%d",&x);
Rezolvare: printf("h(%d,%d)=%d \n",n,x,h(n,x));
introdu n 3 getch();
introdu x 2 }
h(3,2)=-3 Rezolvare:
dati n si x3
9
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
2
h(3;2)=-3
Problema 12
S se elaboreze un program care citete de la tastatur numerele naturale m, n i afieaz pe ecran valoarea funciei
lui Cebev:
1, n 0
Tn ( x) 0, n 1
2 x T ( x) T ( x), n 2
n1 n2
program recurs; #include<stdio.h>
uses crt; #include<conio.h>
var n,x:integer; int T(int n,int x)
function T(n,x:integer):integer; {
begin if(n==0) return 1;
if n=0 then T:=1 if(n==1) return 0;
else if n=1 then T:=0 else return 2*x*T(n-1,x)-T(n-2,x);
else T:=2*x*T(n-1,x)-T(n-2,x); }
end; void main()
begin {
clrscr; int n;int x;
writeln('dati n,x'); clrscr();
readln(n,x); printf("introdu n");
writeln('T(n,x)=',T(n,x)); scanf("%d",&n);
readkey; printf("introdu x ");
end. scanf("%d",&x);
printf("T(%d,%d)=%d \n",n,x,T(n,x));
Rezolvare: getch();
dati n,x }
11 Rezolvare:
T(n,x)=0 introdu n1
introdu x 1
T(1,1)=0
Problema 13
S se elaboreze un program care citete de la tastatur numerele naturale m, n i afieaz pe ecran valoarea funciei
lui Manna Pnueli:
x 1, x 12
F ( x)
F (F (x 2)), x 12
program p13; #include<stdio.h>
uses crt; #include<conio.h>
var x:integer; int f(int x)
function f(x:integer):integer; {
begin if(x>=12) return x-1;
if x>=12 then f:=x-1 else return f(f(x+2));
else
f:=f(f(x+2)); }
void main()
end; {
begin int x;
clrscr; clrscr();
write('dati x'); printf("introdu x ");
read(x); scanf("%d",&x);
10
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
write('f(',x,')=',f(x));
readkey; printf("f(%d)=%d \n",x,f(x));
end. getch();
Rezolvare: }
dati x13 Rezolvare:
f(13)=12 introdu x 13
f(13)=12
F ( x 1), x 5
F ( x) F (F ( x 2)),5 x 12
x 1, x 12
program p14; #include<stdio.h>
uses crt; #include<conio.h>
var x:integer; int f(int x)
function f(x:integer):integer; {
begin if(x<5) return f(x+1);
if x<5 then f:=f(x+1) else if(x<12) return f(f(x+2));
else else return x-1;
if x<=12 then f:=f(f(x+2))
else }
f:=x-1; void main()
end; {
begin int x;
clrscr; clrscr();
write('dati x'); printf("introdu x ");
read(x); scanf("%d",&x);
write('f(',x,')=',f(x));
readkey; printf("f(%d)=%d \n",x,f(x));
end. getch();
}
Rezolvare: Rezolvare:
dati x13 introdu x 13
f(13)=12 f(13)=12
Scrierea unui numr ntr-o baz. Se citete un numr natural nenul n. S se transforme numrul
n baza b, unde b=2..9.
program recurs; #include<iostream.h>
uses crt; #include<conio.h>
var n,b:integer; #include<stdio.h>
procedure baza(n,b:integer); #include<math.h>
var r:integer; void baza(int n,int b)
begin {int r;
r:=n mod b; r=n % b;
if(n>=b) then baza(n div b,b); if(n>=b)
writeln(r); baza(n / b,b);
end; cout<<r<<' ';
begin }
clrscr; void main()
writeln('dati n'); {
11
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
readln(n); clrscr();
repeat int n;int b;
writeln('dati b'); cout<<"n=";cin>>n;
readln(b); do {
until ((b>=2) and (b<10)); cout<<"b=";cin>>b;
baza(n,b); }
readkey; while(b<=2 && b>10);
end. cout<<n<<"->";
Rezolvare: baza(n,b);
dati n getch();
20 }
dati b Result:
2 n=7
1 b=2
0 7->1 1 1
1
0
0
12
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
desc(j+1,s-i,k); s[k]=v;
end; tipar(k);
end; for (i=1;i<=s[k]-1;i++)
begin {
clrscr; s[k]=s[k]-i;
write('scrie numarul='); part(k+1,i);
readln(n); s[k]=s[k]+i;
for i:=1 to n do }
desc(1,n,i); }
readkey; void main()
end. {
clrscr();
cout<<"n=";
Rezolvare: cin>>n;
scrie numarul=4 part(1,n);
4 getch();
13 }
22 Rezolvare:
31 n=4
112 4
121 31
211 22
1111 211
13
121
112
1111
14
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
end; getch();
writeln; }
writeln('cmmdc=',divimp(1,n));
readkey; Rezolvare:
end. dati n5
Rezolvare: x[1]=72
dati n=3 x[2]=84
x[1]=21 x[3]=202
x[2]=66 x[4]=348
x[3]=99 x[5]=526
cmmdc=3 cmmdc=2
dim multi n= }
3 Rezolvare:
1 2 3 n=3
1 3 2 123
2 1 3 132
2 3 1 213
3 1 2 231
3 2 1 312
321
readkey; init();
end. back(1);
Rezolvare: getch();
Introdu n }
3 Rezolvare:
Introdu k n=3
2 k=2
Aranjamente(3,2): 12
1 2 13
1 3 21
2 1 23
2 3 31
3 1 32
3 2
program #include<iostream.h>
backtracking_produsul_cartezian_al_multimilor; #include<conio.h>
uses crt; #include<stdio.h>
type vector=array[1..25] of integer; int st[50],n,nr[50];
var st,nr:vector; void init()
n:integer; {
procedure initial; int i;
var i:integer; printf("n=");
begin scanf("%d",&n);
writeln('Introdu n');
readln(n); for (i=1;i<=n;i++)
for i:=1 to n do {
st[i]:=0; printf("nr[%d]=",i);
for i:=1 to n do scanf("%d",&nr[i]);
begin }
writeln('Introdu numarul de elemente al multimii A',i); for(i=1;i<=n;i++)
readln(nr[i]); st[i]=0;
end; }
writeln('Produsul cartezian al acestor multimi :');
end; void tipar(int p)
function valid(p:integer):boolean; {
begin int i;
valid:=true; for(i=1;i<=p;i++)
end; printf("%d ",st[i]);
procedure tipar(p:integer); printf("\n");
var i:integer; }
begin void back(int p)
for i:=1 to p do {int pv;
write(st[i],' '); for (pv=1;pv<=nr[p];pv++)
writeln; {
end; st[p]=pv;
procedure backtr(p:integer); if(n==p) tipar(p);else back(p+1);
var pval:integer; }
17
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
begin }
if p=n+1 then tipar(p-1) void main()
else for pval:=1 to nr[p] do {
begin clrscr();
st[p]:=pval; init();
if valid(p) then backtr(p+1); back(1);
end; getch();
end; }
Begin Rezolvarea:
clrscr; n=2
initial; nr[1]=2
backtr(1); nr[2]=3
readkey; 11
end. 12
Rezolvare: 13
Introdu n 21
2 22
Introdu numarul de elemente al multimii A1 23
2
Introdu numarul de elemente al multimii A2
3
Produsul cartezian al acestor multimi :
1 1
1 2
1 3
2 1
2 2
2 3
18
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
20
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
1 3 4 124
2 3 4 134
234
21
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
int main()
{
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{cout<<"a["<<i<<","<<j<<"]=";
cin>>a[i][j];
}
for(i=1;i<=n;i++)
{
a[0][i]=1;
a[m+1][i]=1;}
for(i=1;i<=m;i++)
{a[i][0]=1;
a[i][n+1]=1;}
22
Bor Constana grupa C2I2 2012-2013 Teoria recursiilor
cout<<"x=";cin>>x;
cout<<"y=";cin>>y;
for(i=1;i<=m;i++)
{ for(j=1;j<=n;j++) cout<<a[i][j];
cout<<endl;}
scriu(x,y,a);
cout<<endl<<endl;
for(i=1;i<=m;i++)
{for(j=1;j<=n;j++)
cout<<a[i][j];
cout<<endl;
}
getch();
return 0;
}
23