এখানে প্যাসক্যাল প্রোগ্রামে Factorial, Fibonacci এবং Tower of Hanoi সমস্যার সমাধানের উদাহরণ দেওয়া হল। এগুলি সাধারণ রিকার্সিভ সমস্যা, যেখানে একই ফাংশন নিজেই নিজেকে পুনরায় কল করে।
1. Factorial উদাহরণ
Factorial একটি সংখ্যার গুণফল, যা 1 থেকে ঐ সংখ্যা পর্যন্ত সব সংখ্যা গুণ করে পাওয়া যায়। উদাহরণস্বরূপ, 5 এর ফ্যাক্টোরিয়াল হলো 5 × 4 × 3 × 2 × 1 = 120।
Factorial রিকার্সিভ ফাংশন:
program FactorialExample;
var
num: Integer;
function Factorial(n: Integer): Integer;
begin
if n = 0 then
Factorial := 1 { 0 এর ফ্যাক্টোরিয়াল ১ }
else
Factorial := n * Factorial(n - 1); { রিকার্সিভ কল }
end;
begin
writeln('Enter a number: ');
readln(num);
writeln('Factorial of ', num, ' is ', Factorial(num));
end.ব্যাখ্যা: এই প্রোগ্রামে, Factorial ফাংশনটি রিকার্সিভভাবে নিজেকে কল করে, যতক্ষণ না n শূন্য হয়। তখন এটি 1 ফেরত দেয়।
2. Fibonacci উদাহরণ
Fibonacci সিরিজ এমন একটি সংখ্যা সিরিজ যেখানে প্রতিটি সংখ্যাটি তার পূর্ববর্তী দুটি সংখ্যার যোগফল। Fibonacci সিরিজের প্রথম দুইটি সংখ্যা 0 এবং 1। উদাহরণস্বরূপ, Fibonacci সিরিজ হলো: 0, 1, 1, 2, 3, 5, 8, 13, ...
Fibonacci রিকার্সিভ ফাংশন:
program FibonacciExample;
var
n, i: Integer;
function Fibonacci(n: Integer): Integer;
begin
if n <= 1 then
Fibonacci := n { 0 এবং 1 এর জন্য Fibonacci সিরিজ }
else
Fibonacci := Fibonacci(n - 1) + Fibonacci(n - 2); { রিকার্সিভ কল }
end;
begin
writeln('Enter a number: ');
readln(n);
writeln('Fibonacci series up to ', n, 'th term:');
for i := 0 to n - 1 do
writeln(Fibonacci(i));
end.ব্যাখ্যা: এই প্রোগ্রামে, Fibonacci ফাংশনটি রিকার্সিভভাবে Fibonacci সিরিজের নির্দিষ্ট অবস্থান পর্যন্ত গননা করে।
3. Tower of Hanoi উদাহরণ
Tower of Hanoi একটি ক্লাসিক পাজল যেখানে তিনটি খুঁটি এবং বিভিন্ন আকারের ডিস্ক দেওয়া থাকে। উদ্দেশ্য হলো ডিস্কগুলো একটি খুঁটিতে স্থানান্তর করা, তবে এটি করতে হলে কয়েকটি শর্ত পালন করতে হবে:
- একবারে শুধু একটি ডিস্ক সরানো যাবে।
- বড় ডিস্ক ছোট ডিস্কের উপর রাখা যাবে না।
- ডিস্কগুলো স্থানান্তর করার জন্য তিনটি খুঁটি ব্যবহার করতে হবে।
Tower of Hanoi রিকার্সিভ ফাংশন:
program TowerOfHanoi;
procedure MoveDisks(n: Integer; fromPeg, toPeg, auxPeg: Char);
begin
if n = 1 then
writeln('Move disk 1 from ', fromPeg, ' to ', toPeg)
else
begin
MoveDisks(n - 1, fromPeg, auxPeg, toPeg); { Step 1: Move n-1 disks from source to auxiliary peg }
writeln('Move disk ', n, ' from ', fromPeg, ' to ', toPeg); { Step 2: Move the nth disk to target peg }
MoveDisks(n - 1, auxPeg, toPeg, fromPeg); { Step 3: Move n-1 disks from auxiliary peg to target peg }
end;
end;
var
n: Integer;
begin
writeln('Enter the number of disks: ');
readln(n);
writeln('The moves involved are: ');
MoveDisks(n, 'A', 'C', 'B'); { A, C, B are the names of the source, destination, and auxiliary pegs }
end.ব্যাখ্যা: এখানে MoveDisks ফাংশনটি রিকার্সিভভাবে ডিস্কগুলো একটি খুঁটি থেকে অন্য খুঁটিতে স্থানান্তর করতে সাহায্য করে। প্রথমে, এটি n-1 ডিস্ককে সহায়ক খুঁটিতে স্থানান্তর করে, তারপর n তম ডিস্কটি লক্ষ্য খুঁটিতে স্থানান্তর করে এবং আবার n-1 ডিস্ককে সহায়ক খুঁটিতে স্থানান্তর করে।
সারাংশ
- Factorial: এটি একটি সংখ্যার গুণফল, যা রিকার্সিভভাবে গননা করা হয়।
- Fibonacci: প্রতিটি পরবর্তী সংখ্যা তার পূর্ববর্তী দুটি সংখ্যার যোগফল, যা রিকার্সিভভাবে পাওয়া যায়।
- Tower of Hanoi: তিনটি খুঁটি এবং ডিস্কগুলির মাধ্যমে একটি নির্দিষ্ট শর্ত মেনে ডিস্ক স্থানান্তর করা হয়, যা রিকার্সিভভাবে সমাধান করা হয়।
এই তিনটি সমস্যা রিকার্সিভ ধারণা ব্যবহারের উপযুক্ত উদাহরণ এবং এগুলি প্রোগ্রামিংয়ের মৌলিক ধারণা শেখানোর জন্য ভালো উদাহরণ।
Read more