রিকার্সিভ ফাংশন হলো এমন ফাংশন, যা নিজেকে নিজেই কল করে।
একটি রিকার্সিভ ফাংশনে অন্তত একটি বেস কেস আর অন্তত একটি রিকার্সিভ কেস থাকা দরকার।
একটি বেস কেস ফাংশনটিকে আবার কল না করেই একটি মান রিটার্ন করে। আর একটি রিকার্সিভ কেস ফাংশনটিকে আবার কল করে, এবং ইনপুট এমনভাবে বদলে দেয় যাতে একসময় তা বেস কেসের সাথে মিলে যায়।
খুব বেশি সময়েই প্রতিটি কেস আলাদা আলাদা ফাংশন ক্লজে লেখা হয়।
# base case
def count([]), do: 0
# recursive case
def count([_head | tail]), do: 1 + count(tail)
আপনি একজন আগ্রহী পাখি পর্যবেক্ষক, যিনি হিসাব রাখেন কোনও একটি দিনে আপনার বাগানে কতগুলো পাখি এসেছে।
আপনি সিদ্ধান্ত নিয়েছেন যে আপনার পাখি পর্যবেক্ষণকে নতুন একটি স্তরে নিয়ে যাবেন এবং কয়েকটি টুল ইমপ্লিমেন্ট করবেন, যা ডেটা ট্র্যাক করতে ও প্রক্রিয়া করতে সাহায্য করবে।
আপনি ডেটা ইন্টিজারের একটি অ্যারে হিসেবে সংরক্ষণ করার সিদ্ধান্ত নিয়েছেন। অ্যারের প্রথম সংখ্যাটি আজ আপনার বাগানে আসা পাখির সংখ্যা, দ্বিতীয়টি গতকালের, আর এভাবে চলতে থাকে।
BirdCount.today/1 ফাংশনটি ইমপ্লিমেন্ট করুন। এটি প্রতিদিনের পাখি গণনার একটি অ্যারে নেবে এবং আজকের গণনা রিটার্ন করবে। অ্যারেটি খালি হলে এটি nil রিটার্ন করবে।
BirdCount.today([2, 5, 1])
# => 2
BirdCount.increment_day_count/1 ফাংশনটি ইমপ্লিমেন্ট করুন। এটি প্রতিদিনের পাখি গণনার একটি অ্যারে নেবে এবং আজকের গণনা ১ বাড়াবে। অ্যারেটি খালি হলে [1] রিটার্ন করবে।
BirdCount.increment_day_count([4, 0, 2])
# => [5, 0, 2]
BirdCount.has_day_without_birds?/1 ফাংশনটি ইমপ্লিমেন্ট করুন। এটি প্রতিদিনের পাখি গণনার একটি অ্যারে নেবে। বাগানে অন্তত একটি দিন কোনো পাখি না এলে এটি true রিটার্ন করবে, নাহলে false।
BirdCount.has_day_without_birds?([2, 0, 4])
# => true
BirdCount.has_day_without_birds?([3, 8, 1, 5])
# => false
BirdCount.total/1 ফাংশনটি ইমপ্লিমেন্ট করুন। এটি প্রতিদিনের পাখি গণনার একটি অ্যারে নেবে এবং আপনি ডেটা সংগ্রহ শুরু করার পর থেকে আপনার বাগানে আসা মোট পাখির সংখ্যা রিটার্ন করবে।
BirdCount.total([4, 0, 9, 0, 5])
# => 18
কিছু দিন অন্য দিনের চেয়ে ব্যস্ত থাকে। যে দিনে আপনার বাগানে পাঁচটি বা তার বেশি পাখি এসেছে, সেটি একটি ব্যস্ত দিন।
BirdCount.busy_days/1 ফাংশনটি ইমপ্লিমেন্ট করুন। এটি প্রতিদিনের পাখি গণনার একটি অ্যারে নেবে এবং ব্যস্ত দিনের সংখ্যা রিটার্ন করবে।
BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
Exercism-এ সাইন আপ করুন, Elixir ট্র্যাকের 58টি কনসেপ্ট168টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।