সি প্রোগ্রামিং এইচটিএমএল সিএসএস জাভাস্ক্রিপ্ট পিএইচপি এসকিউএল
ফোরাম
×

 সি টিউটোরিয়াল

সি প্রোগ্রামিং কি? সি এর ইতিহাস সি এর বৈশিষ্ট্যসমূহ কেন সি শিখবেন? সি ইন্সটলেশন প্রথম সি প্রোগ্রাম সি প্রোগ্রামের ফ্লো প্রোগ্রামিং শেখার সঠিক পদ্ধতি সি কীওয়ার্ড সি আইডেন্টিফায়ার সি ভ্যারিয়েবল সি কনস্ট্যান্ট সি ডাটা টাইপ সি মোডিফায়ার সি ইনপুট/আউটপুট সি অপারেটর সি কমেন্ট সি অপারেটর অগ্রাধিকার

সি কন্ট্রোল স্টেটমেন্ট

সি ইফ সি ইফ...ইলস সি ফর লুপ সি হোহাইল লুপ সি ডু...হোহাইল লুপ সি ব্রেক সি কন্টিনিউ সি সুইচ স্টেটমেন্ট সি goto স্টেটমেন্ট

 সি ফাংশন

সি ফাংশন পরিচিতি সি ইউজার কর্তৃক ফাংশন সি ফাংশন টাইপ সি রিকার্সন সি ভ্যারিয়েবল স্কোপ

 সি অ্যারে

সি অ্যারে পরিচিতি সি মালটি-ডাইমেনশনাল অ্যারে সি অ্যারে ফাংশন

 সি স্ট্রিং

সি স্ট্রিং সি স্ট্রিং ফাংশন

 সি পয়েন্টার

সি পয়েন্টার পরিচিত সি পয়েন্টার অ্যারে সি পয়েন্টার ফাংশন সি মেমোরি ম্যানেজমেন্ট

 সি ফাইল এবং স্ট্রাকচার

স্ট্রাকচার পরিচিত স্ট্রাকচার ও পয়েন্টার সি স্ট্রাকচার ও ফাংশন সি ইউনিয়ন ফাইল হ্যান্ডেলিং

 সি অতিরিক্ত টিউটোরিয়াল

সি লাইব্রেরী সি প্রিপ্রোসেসর এবং ম্যাক্রো সি ইনুমিরেশন সি এরর নিয়ন্ত্রণ সি টাইপ কাস্টিং সি বিট ফিল্ড সি ভ্যারিয়েবল আর্গুমেন্ট সি কমান্ড লাইন আর্গুমেন্ট

 

সি প্রোগ্রামিং রিকার্সন


এই অধ্যায়ে আপনি সি প্রোগ্রামিং এ রিকার্সন ফাংশন তৈরি করা শিখবেন।

যে ফাংশন নিজেই নিজেকে কল(call) করে তাকে বলা হয় রিকার্সিভ(recursive) ফাংশন এবং এই কৌশলকে বলা হয় রিকার্সন(recursion)।


রিকার্সন কিভাবে কাজ করে?

void recurse()
{
    ... .. ...
    recurse();
    ... .. ...
}

int main()
{
    ... .. ...
    recurse();
    ... .. ...
}

How recursion works in C programming?

প্রতিবন্ধকতা সৃষ্ট করে এমন কিছু কন্ডিশনের দেখা না পাওয়া পর্যন্ত রিকার্সন চলতেই থাকে।

অসীম রিকার্সনকে বাধা দেওয়ার জন্য if...else স্টেটমেন্ট অথবা এধরনের অন্য কোনো স্টেটমেন্ট ব্যবহার করা যেতে পারে যেখানে এক অংশ রিকার্সিভ হবে, কিন্তু অন্যান্য অংশ রিকার্সিভ হবে না।


উদাহরনঃ রিকার্সন ফাংশন

//রিকার্সন ব্যবহার করে স্বাভাবিক সংখ্যা যোগের জন্য প্রোগ্রাম
#include <stdio.h>
int sum(int num);

int main()
{
    int number, result;

    printf("Enter a positive integer: ");
    scanf("%d", &number);

    result = sum(number);

    printf("sum=%d", result);
}

int sum(int num)
{
    if (num!=0)
        // sum() ফাংশন নিজেই নিজেকে কল করে
        return num + sum(num-1); 
    else
        return num;
}

আউটপুট

Enter a positive integer: 3
sum= 6

উপরের প্রোগ্রামে number ভ্যারিয়েবল sum() ফাংশনের মধ্যে দিয়ে আর্গুমেন্ট হিসাবে অতিক্রম হয় এবং main() ফাংশন থেকে sum() ফাংশন প্রাথমিকভাবে কল(call) হয়।

ধরুন, num এর প্রাথমিক ভ্যালু 3। পরবর্তী ফাংশন কলে sum() ফাংশনের মধ্য দিয়ে 2 অতিক্রম করানো হয়। num এর ভ্যালু 0 এর সমান না হওয়া পর্যন্ত এই প্রক্রিয়া চলতে থাকে।

যখন num এর ভ্যালু 0 এর সমান হয় তখন if কন্ডিশন ব্যার্থ হয় এবং else অংশ এক্সিকিউশন হয়ে যোগফল main() ফাংশনের কাছে রিটার্ন করে।


Calculation of sum of natural number using recursion


রিকার্সনের সুবিধা এবং অসুবিধা

রিকার্সন প্রোগ্রামকে সহজ এবং স্বচ্ছ রাখে। রিকার্সন ব্যবহার করে সকল এলগরিদমকে পৌনঃপুনিকভাবে(recursively) ডিফাইন্ড করা যেতে পারে। ফলে ইহা বুঝা এবং প্রমাণ করা উভয়ই সহজ হয়ে যায়। 

আপনার প্রোগ্রামের মুখ্য বিষয় যদি দ্রুতগতি সম্পন্ন হয় তাহলে রিকার্সন না ব্যবহার করাই ভাল। কারণ রিকার্সন মেমোরির অনেক জায়গা দখল করে এবং সাধারণত ধীর গতির হয়। ইহার পরিবর্তে আপনি লুপ ব্যবহার করতে পারেন।