একটি পুরানো, সুপরিচিত সমস্যা বিবেচনা করুন :
গণিতে, দুই বা ততোধিক অ-শূন্য পূর্ণ পূর্ণসংখ্যার সবচেয়ে বড় সাধারণ বিভাজক (জিসিডি) হ'ল বৃহত্তম ধনাত্মক পূর্ণসংখ্যা যা বাকী ছাড়াই সংখ্যাগুলি ভাগ করে দেয়।
গিসিডির সংজ্ঞাটি আশ্চর্যজনকভাবে সহজ:
যেখানে মোড হল মডুলো অপারেটর (এটি হল পূর্ণসংখ্যা বিভাগের পরে অবশিষ্ট)।
ইংরেজিতে এই সংজ্ঞা কোন সংখ্যা সাধারণ গুণনীয়ক বক্তব্য এবং শূন্য যে সংখ্যা, এবং দুটি সংখ্যার সাধারণ গুণনীয়ক হয় মি এবং এন সাধারণ গুণনীয়ক হয় এন এবং বিভাজক পর বাকি মি দ্বারা এন ।
আপনি কেন এটি কাজ করে তা জানতে চাইলে ইউক্লিডিয়ান অ্যালগরিদমের উইকিপিডিয়া নিবন্ধটি দেখুন ।
উদাহরণস্বরূপ gcd (10, 8) গণনা করা যাক। প্রতিটি পদক্ষেপের ঠিক আগে তার সমান:
- জিসিডি (10, 8)
- জিসিডি (10, 10 মডি 8)
- জিসিডি (8, 2)
- জিসিডি (8, 8 মড 2)
- জিসিডি (2, 0)
- 2
প্রথম ধাপে 8 টি শূন্যের সমান হয় না, সুতরাং সংজ্ঞাটির দ্বিতীয় অংশটি প্রযোজ্য। 10 মোড 8 = 2 কারণ 8 টি একবারে 2 এর অবশিষ্টাংশের সাথে 10 এ যায় 3 ধাপ 3 এ, দ্বিতীয় অংশটি আবার প্রয়োগ হয়, তবে এবার 8 মড 2 = 0 কারণ 2 টির সাথে বাকী অংশ ছাড়াই 8 ভাগ করে। 5 ধাপে, দ্বিতীয় তর্কটি 0 হয়, সুতরাং উত্তরটি 2 হয়।
আপনি কি খেয়াল করেছেন যে সমান চিহ্নটির বাম এবং ডানদিক উভয় দিকেই জিসিডি উপস্থিত হয়েছে? একজন গণিতবিদ বলবেন যে এই সংজ্ঞাটি পুনরাবৃত্ত হয় কারণ আপনি যে অভিব্যক্তিটি সংজ্ঞায়িত করছেন তার সংজ্ঞাটির ভিতরে পুনরাবৃত্তি ঘটে ।
পুনরাবৃত্ত সংজ্ঞা মার্জিত হতে থাকে। উদাহরণস্বরূপ, তালিকার যোগফলের জন্য একটি পুনরাবৃত্ত সংজ্ঞা
sum l =
if empty(l)
return 0
else
return head(l) + sum(tail(l))
head
তালিকার প্রথম উপাদানটি কোথায় এবং তালিকার tail
বাকি অংশ। নোট করুন যে sum
এর সংজ্ঞাটি শেষে শেষ হয় urs
পরিবর্তে আপনি তালিকার সর্বোচ্চ মানটিকে পছন্দ করতে পারেন:
max l =
if empty(l)
error
elsif length(l) = 1
return head(l)
else
tailmax = max(tail(l))
if head(l) > tailmax
return head(l)
else
return tailmax
এটিকে সংযোজনগুলির একটি সিরিজে পরিণত করার জন্য আপনি অ-নেতিবাচক পূর্ণসংখ্যার পুনরাবৃত্তভাবে সংজ্ঞা দিতে পারেন:
a * b =
if b = 0
return 0
else
return a + (a * (b - 1))
গুণকে সংযোজনগুলির একটি সিরিজে রূপান্তরিত করার বিষয়ে যদি সেই বিটটি বোঝা যায় না, এটি কীভাবে কাজ করে তা দেখার জন্য কয়েকটি সাধারণ উদাহরণ প্রসারিত করার চেষ্টা করুন।
মার্জ সাজানোর একটি সুন্দর পুনরাবৃত্ত সংজ্ঞা রয়েছে:
sort(l) =
if empty(l) or length(l) = 1
return l
else
(left,right) = split l
return merge(sort(left), sort(right))
আপনি কী কী সন্ধান করবেন তা যদি জানা থাকে তবে পুনরাবৃত্তি সংজ্ঞাগুলি চারদিকে রয়েছে। লক্ষ্য করুন যে এই সমস্ত সংজ্ঞায় কীভাবে খুব সাধারণ বেস কেস রয়েছে, যেমন , gcd (m, 0) = m। পুনরাবৃত্তির ক্ষেত্রে সহজ উত্তর পেতে নামার জন্য সমস্যাটি দূরে সরে যায়।
এই বোঝার সাথে, আপনি এখন পুনরাবৃত্তি সম্পর্কিত উইকিপিডিয়ায় নিবন্ধের অন্যান্য অ্যালগরিদমগুলির প্রশংসা করতে পারেন !