টিসিএল (Tcl) - Recursive Procedures এর উদাহরণ
Recursive procedure হলো এমন একটি ফাংশন বা প্রসিডিউর যা নিজের প্রতি কল (recursive call) করে। এটি এমন একটি কৌশল যেখানে একটি সমস্যা ছোট আকারে সমাধান করার জন্য সেই একই সমস্যা আবার সমাধান করার চেষ্টা করা হয়। টিসিএল-এ রিকার্সিভ ফাংশন তৈরি করা খুবই সহজ এবং এটি বেশ কিছু সমস্যা সমাধানে খুব কার্যকরী।
১. রিকার্সন কী?
রিকার্সন এমন একটি কৌশল যেখানে একটি ফাংশন বা প্রসিডিউর নিজেকে কল করে, এবং এটি একটি স্টপ কন্ডিশন (base case) এর মাধ্যমে শেষ হয়। রিকার্সন সাধারনত বড় সমস্যা ছোট ছোট উপ-সমস্যায় ভাগ করার জন্য ব্যবহৃত হয়।
২. ফ্যাক্টোরিয়াল (Factorial) রিকার্সিভ ফাংশন
ফ্যাক্টোরিয়াল একটি সাধারণ রিকার্সিভ সমস্যা। n! এর মান হিসাব করা হয়:
n! = n * (n-1) * (n-2) * ... * 1যেখানে, 0! এর মান 1 হিসেবে ধরা হয়।
উদাহরণ:
proc factorial {n} {
if { $n == 0 } {
return 1
} else {
return [expr $n * [factorial [expr $n - 1]]]
}
}
set result [factorial 5]
puts $result ;# আউটপুট: 120এখানে:
factorialএকটি রিকার্সিভ ফাংশন যাnএর মান ০ হলে1রিটার্ন করে (base case)।- অন্যথায়,
factorialনিজেকে কল করে এবংn * factorial(n-1)হিসাব করে ফ্যাক্টোরিয়াল বের করে।
স্টেপ বাই স্টেপ কার্যক্রম:
factorial 5→5 * factorial 4factorial 4→4 * factorial 3factorial 3→3 * factorial 2factorial 2→2 * factorial 1factorial 1→1 * factorial 0factorial 0→1(base case)
তবে factorial 5 এর ফলস্বরূপ:
5 * 4 * 3 * 2 * 1 = 120৩. ফিবোনাচ্চি সিরিজ (Fibonacci Series) রিকার্সিভ ফাংশন
ফিবোনাচ্চি সিরিজের প্রথম কিছু সংখ্যার গাণিতিক সম্পর্ক এমন:
F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) (n >= 2)উদাহরণ:
proc fibonacci {n} {
if { $n == 0 } {
return 0
} elseif { $n == 1 } {
return 1
} else {
return [expr [fibonacci [expr $n - 1]] + [fibonacci [expr $n - 2]]]
}
}
set result [fibonacci 6]
puts $result ;# আউটপুট: 8এখানে:
fibonacciফাংশনটি রিকার্সিভভাবে আগের দুটি ফিবোনাচ্চি সংখ্যার যোগফল বের করে।
স্টেপ বাই স্টেপ কার্যক্রম:
fibonacci 6→fibonacci 5 + fibonacci 4fibonacci 5→fibonacci 4 + fibonacci 3fibonacci 4→fibonacci 3 + fibonacci 2- ... এবং এভাবে চলতে থাকে।
ফিবোনাচ্চি সিরিজের ৬ নম্বর সংখ্যা হল 8, কারণ:
F(0) = 0, F(1) = 1, F(2) = 1, F(3) = 2, F(4) = 3, F(5) = 5, F(6) = 8৪. তিনটি ফ্যাক্টর ব্যবহারকারী রিকার্সিভ ফাংশন
একটি সাধারণ রিকার্সিভ ফাংশনের উদাহরণ যেখানে তিনটি আর্গুমেন্ট ব্যবহার করে গাণিতিক অপারেশন করা হয়।
উদাহরণ:
proc sumRecursive {a b c} {
if { $a <= 0 } {
return $c
} else {
return [sumRecursive [expr $a - 1] $b [expr $c + $b]]
}
}
set result [sumRecursive 5 3 0]
puts $result ;# আউটপুট: 15এখানে, sumRecursive ফাংশনটি একটি রিকার্সিভ পদ্ধতিতে তিনটি আর্গুমেন্ট ব্যবহার করে একটি সংখ্যার যোগফল বের করছে। এটা মূলত সিম্পল গনিতীয় অপারেশনগুলোকে রিকার্সিভভাবে সম্পাদন করে।
৫. স্টপ কন্ডিশন এবং ইনফিনিট রিকার্সন
রিকার্সন ব্যবহারের সময় স্টপ কন্ডিশন বা base case অপরিহার্য। যদি স্টপ কন্ডিশন না থাকে, তবে রিকার্সিভ কলের মাধ্যমে ইনফিনিট রিকার্সন হতে পারে, যার ফলে স্ট্যাক ওভারফ্লো (stack overflow) হতে পারে। তাই স্টপ কন্ডিশন সতর্কতার সাথে ঠিক করা উচিত।
উপসংহার
টিসিএল-এ রিকার্সিভ প্রসিডিউরস এমন একটি শক্তিশালী কৌশল যা বড় সমস্যাগুলোর সমাধান ছোট ছোট উপ-সমস্যায় ভাগ করে। ফ্যাক্টোরিয়াল, ফিবোনাচ্চি সিরিজ এবং অন্যান্য গাণিতিক সমস্যাগুলির সমাধানে রিকার্সন খুব কার্যকরী। তবে, রিকার্সন ব্যবহারের সময় স্টপ কন্ডিশন ঠিকভাবে স্থাপন করা অত্যন্ত গুরুত্বপূর্ণ, যাতে ইনফিনিট রিকার্সন থেকে রক্ষা পাওয়া যায়।
Read more