Bài tập và bài giải về Đệ quy trong Pascal: Bài 01 – In ra giá trị giai thừa của mảng 1 chiều bằng đệ quy Bài 02 – In ra giá trị luỹ thừa 2 của các phần tử trong mảng 1 chiều Bài 03 – In ra giá trị nhân 3 của các phần tử trong mảng 1 chiều Bài 04 – In ra giá trị nhân 7 của các phần tử trong mảng 1 chiều Bài 05 – In ra số siêu nguyên tố có 4 chữ số
Trang 1Đệ quy là các Function hay Procedure gọi lại chính nó trong bản thân của hàm hay thủ tục, TD:
Function GiaiThua( k : Integer): LongInt;
là hàm ñệ quy dùng ñể tính giai thừa của một số k và trả về giá trị giai thừa của K
Function GiaiThua ( k : Integer): LongInt ;
Begin
If k = 1 then GiaiThua := 1
Else GiaiThua := GiaiThua(k-1) * k;
End;
Bài 01 – In ra giá trị giai thừa của mảng 1 chiều bằng ñệ quy
Bạn hãy nhập một dãy số nguyên và tính giai thừa của từng số trong dãy ñó
(Dãy 1, 4, 7, 5, 2 => In ra 1, 24, 5040, 120, 2 )
Var
A: Array [1 10] of Integer;
i, n: Integer;
Function GiaiThua (k: Integer): LongInt ;
Begin
If k = 1 then GiaiThua := 1
Else GiaiThua := GiaiThua(k-1) * k;
End;
Begin
WriteLn('Hay nhap so phan tu cua day so');
ReadLn(n);
{Nhập dãy số}
For i := 1 to n do begin
WriteLn('Hay nhap phan tu thu ', i);
ReadLn(A[i]);
End;
{In ra giá trị giai thừa}
For i := 1 to n do
Write(GiaiThua(A[i]):6);
ReadLn;
End
Trang 2Bài 02 – In ra giá trị luỹ thừa 2 của các phần tử trong mảng 1 chiều
Bạn hãy nhập một dãy số nguyên và tính luỹ thừa 2 bằng ñệ quy của từng số trong dãy ñó
(Dãy 1, 4, 7, 5, 2 => In ra 1, 16, 49, 25, 4 )
Var
A: Array [1 10] of Integer;
i, n: Integer;
Function LuyThua(a, k: Integer): LongInt;
Begin
If k = 1 then LuyThua := a
Else LuyThua := LuyThua(a, k-1) * a;
End;
Begin
WriteLn('Hay nhap so phan tu cua day so');
ReadLn(n);
{Nhập dãy số}
For i := 1 to n do begin
WriteLn('Hay nhap phan tu thu ', i);
ReadLn(A[i]);
End;
{In ra giá trị luỹ thừa 2}
For i := 1 to n do
Write(LuyThua(2, A[i]):6);
ReadLn;
End
Procedure cũng tương tự như Function, có thể có ñối số nhưng không có giá trị trả về TD: Procedure NhanMang(k: Integer);
Procedure NhanMang(k: Integer);
Begin
For i := 1 to n do
A[i] := A[i] * k;
End;
Bài 03 – In ra giá trị nhân 3 của các phần tử trong mảng 1 chiều
Bạn hãy nhập một dãy số nguyên và nhân ñôi từng số trong dãy ñó
(Dãy 1, 4, 7, 5, 2 => In ra 3, 12, 21, 15, 6 )
Trang 3Var
A: Array [1 10] of Integer;
i, n: Integer;
Procedure NhanMang(k: Integer);
Begin
For i := 1 to n do
A[i] := A[i] * k;
End;
Begin
WriteLn('Hay nhap so phan tu cua day so');
ReadLn(n);
{Nhập dãy số}
For i := 1 to n do begin
WriteLn('Hay nhap phan tu thu ', i);
ReadLn(A[i]);
End;
{Nhân 3 các phần tử của mảng}
NhanMang(3);
{In dãy số}
For i := 1 to n do
Write(A[i]:4);
End;
WriteLn;
ReadLn;
End
Bài 04 – In ra giá trị nhân 7 của các phần tử trong mảng 1 chiều
Bạn hãy nhập một dãy số nguyên và nhân 7 từng số trong dãy ñó
(Dãy 1, 4, 7, 5, 2 => In ra 7, 28, 49, 35, 14 )
Bài 05 – In ra số siêu nguyên tố có 4 chữ số
Bạn hãy tìm các số siêu nguyên tố có 4 chữ số Số siêu nguyên tố là các số nguyên tố và khi bỏ ñi các chữ số bên phải thì nó cũng là số nguyên tố như 3137 (3137, 313, 31, 3 ñều là số nguyên tố)
(In ra 2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393 )
Trang 4Var
A: Array [1 10] of Integer;
i, n, Dem: Integer;
Var
j: Integer;
Begin
If (k <= 0) or (k = 1) then begin NguyenTo := False; Exit; End;
For j := 2 to Trunc(Sqrt(k)) do
If k mod j = 0 then begin NguyenTo:= False; Exit; End;
NguyenTo := True;
End;
Function SieuNguyenTo(k: Integer): Boolean;
Begin
SieuNguyenTo: = True;
While k > 0 do begin
If not NguyenTo(k) then begin
SieuNguyenTo:= False;
Exit;
End;
k := k div 10;
End;
End;
Begin
{In ra các số Siêu nguyên tố có 4 chữ số}
For i := 1000 to 9999 do
If SieuNguyenTo(i) then Begin Write(i:5); Dem := Dem + 1; End;
If Dem = 0 then WriteLn('Khong co Sieu so nguyen to nao');
ReadLn;
End