ZAMYLA: বুঝতে যাতে recursion, আপনি আবশ্যক প্রথম recursion বুঝতে. প্রোগ্রাম ডিজাইন মানে মধ্যে recursion হচ্ছে আপনি স্ব - উল্লেখ আছে সংজ্ঞা. Recursive ডাটা স্ট্রাকচার, উদাহরণস্বরূপ, ডাটা স্ট্রাকচার যে নিজেদের অন্তর্ভুক্ত তাদের সংজ্ঞা. কিন্তু আজ, আমরা নজর দিতে যাচ্ছেন recursive ফাংশন উপর. , ফাংশন ইনপুট নিতে পুনরাহ্বান যে আর্গুমেন্ট, এবং হিসাবে একটি মান প্রদান করে দ্বারা প্রতিনিধিত্ব আউটপুট এখানে এই চিত্রটি. আমরা শরীরের হিসাবে বাক্সের মনে করব সেট ধারণকারী ফাংশন, ব্যাখ্যা যে নির্দেশাবলী ইনপুট এবং আউটপুট প্রদান. শরীরের ভেতরে পুরো বিষয়টা বিস্তারিত বিবেচনা গ্রহণ ফাংশন কল প্রকাশ পারে অন্যান্য কার্যাবলী হিসাবে ভাল. এই সহজ ফাংশন, foo বিন্যাস, নিন যে ইনপুট হিসেবে একটি একক পংক্তি নেয় এবং প্রিন্ট কতগুলি অক্ষর যে স্ট্রিং আছে. স্ট্রিং দ্বারা জন্য ফাংশন strlen,, যার ফলাফল হয়, বলা হয় printf থেকে কল জন্য প্রয়োজন. এখন, কি একটি recursive ফাংশন তোলে বিশেষ এটি কল নিজেই যে. আমরা এই recursive উপস্থাপন করতে পারেন এই কমলা তীর কল ফিরে নিজেকে looping. কিন্তু আবার নিজেই নির্বাহ শুধুমাত্র ইচ্ছাশক্তি অন্য recursive কল করতে, এবং অন্য এবং অন্য. কিন্তু recursive ফাংশন অসীম হতে পারে না. তারা একরকম শেষ করতে হবে, অথবা আপনার প্রোগ্রাম চিরতরে চালানো হবে. সুতরাং আমরা বিরতি একটি পন্থা খুঁজে বের করতে হবে recursive কল আউট. আমরা বেস ক্ষেত্রে এই কল. বেস ক্ষেত্রে শর্ত পূরণ করা হয়, ফাংশন না করে ফেরৎ অন্য recursive কল. একটি অকার্যকর ফাংশন, হাই, এই ফাংশন নিন যে ইনপুট হিসাবে কোন int এন লাগে. বেস কেস আসে প্রথম. এন কম শূন্য, মুদ্রণ বিদায় এবং যদি অন্য সব ক্ষেত্রে বিনিময়ে, ফাংশন পরিষ্কার উচ্চ মুদ্রণ ও চালানো হবে recursive কল. সঙ্গে ফাংশন পরিষ্কার উচ্চ আরেকটি কল একটি decremented ইনপুট মান. এখন, আমরা, HI মুদ্রণ যদিও ফাংশন বিনষ্ট করবে না যে আমরা যতক্ষণ তার রিটার্ন টাইপ ফিরে, এই ক্ষেত্রে অকার্যকর মধ্যে. তাই প্রত্যেক এন বেস কেস ছাড়া অন্য জন্য, এই ফাংশন হাই হাই ফিরে আসবে n এর বিয়োগ 1. এই ফাংশন যদিও অকার্যকর যেহেতু, আমরা স্পষ্টভাবে এখানে রিটার্ন টাইপ না. আমরা শুধু ফাংশন নির্বাহ করব. তাই পরিষ্কার উচ্চ কলিং (3) পরিষ্কার উচ্চ মুদ্রণ ও হবে পরিষ্কার উচ্চ (2) (1) এক পরিষ্কার উচ্চ executes যা চালানো পরিষ্কার উচ্চ executes যা (0), যেখানে বেস ক্ষেত্রে শর্ত পূরণ করা হয়. তাই পরিষ্কার উচ্চ (0) বিদায় ছাপে এবং আয়. ঠিক আছে. তাই এখন আমরা বুনিয়াদি বুঝতে যে তারা প্রয়োজন যে recursive ফাংশন, অন্তত একটি বেস ক্ষেত্রে যেমন recursive কল, এর একটি যান যাক আরো অর্থপূর্ণ উদাহরণ. শুধু ফেরত দেয় না যে এক কোন ব্যাপার কি বাতিলযোগ্য. এর গৌণিক কটাক্ষপাত করা যাক অপারেশন মধ্যে সবচেয়ে বেশি ব্যবহৃত সম্ভাবনা গণনার. N এর গুণিতক প্রতি হাজার পণ্য আর ইতিবাচক পূর্ণসংখ্যা কম ও এন সমান. সুতরাং গৌণিক পাঁচটি 5 বার 4 বার হল 3 বার 2 বার 1 120 দিতে. চার গৌণিক 4 বার 3 বার হয় 2 বার 1 24 দিতে. এবং একই নিয়ম প্রযোজ্য কোন ধনাত্মক পূর্ণসংখ্যা দিতে. তাই কিভাবে আমরা একটি recursive লিখতে পারে গৌণিক হিসাব যে ফাংশন একটা সংখ্যা? ভাল, আমরা উভয় শনাক্ত করতে হবে বেস কেস এবং recursive কল. recursive কল একই হবে বেস ছাড়া সব ক্ষেত্রেই জন্য কেস, যা আমরা করতে হবে যে মানে আমাদের দিতে হবে এমন একটি প্যাটার্ন খুঁজে আমাদের কাঙ্ক্ষিত ফলাফল. এই উদাহরণস্বরূপ, কিভাবে 5 গৌণিক দেখুন 1 দ্বারা 2 দ্বারা 3 দ্বারা 4 গুন জড়িত থাকে এবং যে একই গুণ এখানে পাওয়া যায় 4 গৌণিক সংজ্ঞা. সুতরাং আমরা 5 গৌণিক যে দেখুন মাত্র 5 বার 4 গৌণিক. আমি এই প্যাটার্ন প্রয়োগ নেই 4 থেকে পাশাপাশি গুণিতক? হ্যাঁ. আমরা 4 গৌণিক ধারণকারী দেখুন গুণন 3 বার 2 বার 1, 3 গৌণিক হিসাবে একই সংজ্ঞা. তাই 4 গৌণিক 4 বার 3 সমান গৌণিক, এবং তাই এবং তাই ঘোষণা আমাদের প্যাটার্ন 1 গৌণিক, যতক্ষণ লাঠি যা সংজ্ঞা দ্বারা 1 সমান. অন্য কোন ইতিবাচক আছে ইন্টিজার বাকি. তাই আমরা জন্য প্যাটার্ন আছে আমাদের recursive কল. এন গৌণিক এন বার সমান n এর গৌণিক বিয়োগ 1. এবং আমাদের বেস কেস? এটা শুধু আমাদের সংজ্ঞা হবেন 1 গৌণিক. তাই এখন আমরা লিখিতভাবে সরানো যাবে ফাংশন জন্য কোড. বেস কেস জন্য, আমরা করতে হবে শর্ত এন সমান 1, সমান যেখানে আমরা 1 ফিরে আসবেন. তারপর recursive কল সম্মুখের চলন্ত, আমরা এন বার ফিরে পাবেন n এর গৌণিক বিয়োগ 1. এখন আসুন এই আমাদের পরীক্ষা করা যাক. এর গৌণিক 4 চেষ্টা করুন. আমাদের ফাংশন প্রতি এটি সমান 4 বার গৌণিক থেকে (3). গুণিতক (3) সমান 3 বার গৌণিক (2). গুণিতক (2) 2 বার সমান গৌণিক (1), যা 1 প্রদান. গুণিতক (2) এখন 2 বার 1, 2 ফেরৎ. গুণিতক (3) এখন ফিরে আসতে পারেন 3 বার 2, 6. এবং পরিশেষে, গৌণিক (4) 4 বার 6, 24 ফেরৎ. আপনার কোন অসুবিধা সম্মুখীন করছেন recursive কল সঙ্গে, যে সাজা ফাংশন ইতিমধ্যে কাজ করে. আমি কি এই দ্বারা মানে হল আপনি উচিত যে ফিরে আপনার recursive কল বিশ্বাস সঠিক মান. উদাহরণস্বরূপ, আমি যদি জানেন যে গৌণিক (5) 5 বার সমান গৌণিক (4), আমি যে বিশ্বাস করা যাচ্ছে না গৌণিক (4) আমার 24 দিতে হবে. আপনি যদি একটি পরিবর্তনশীল হিসাবে মনে করে করবে না, আপনার আগে থেকেই নির্ধারিত হলে গৌণিক (4). সুতরাং কোনো গৌণিক জন্য (ঢ), এটা n এর পণ্য এবং পূর্ববর্তী গৌণিক. এবং এই আগের গৌণিক কল করে প্রাপ্ত হয় n এর গৌণিক বিয়োগ 1. আপনি বাস্তবায়ন করতে পারেন এখন, যদি দেখতে একটি recursive নিজের কাজ. আপনার টার্মিনাল আপ লোড করুন, অথবা run.cs50.net, এবং একটি ফাংশন যোগফল লিখুন যে একটি পূর্ণসংখ্যা এন নেয় এবং ফেরৎ সব পরপর ইতিবাচক ও যোগফল এন থেকে 1 থেকে ইন্টিজার. আমি কিছু অঙ্কের আউট লিখিত করেছি আপনি সাহায্য মান আমাদের. প্রথমত, চিন্তা করা বেস ক্ষেত্রে শর্ত. এর পরে, যোগফল তাকান (5). আপনি পরিপ্রেক্ষিতে তা প্রকাশ করতে পারেন অন্য সমষ্টি? এখন, কি যোগফল সম্পর্কে (4)? আপনি কিভাবে যোগফল প্রকাশ করতে পারেন (4) অন্য যোগফল পরিপ্রেক্ষিতে? আপনি যোগফল একবার (5) ও যোগফল (4) অন্যান্য অঙ্কের নিরিখে প্রকাশ করেন, দেখতে আপনি একটি চিহ্নিত করতে পারেন যোগফল (ঢ) জন্য প্যাটার্ন. যদি না হয়, কয়েক অন্যান্য সংখ্যার চেষ্টা এবং তাদের অঙ্কের মধ্যে প্রকাশ অন্য সংখ্যার নিরিখে. বিযুক্ত জন্য নিদর্শন চিহ্নিত করে সংখ্যা, আপনি আপনার পথ থেকে ভাল আছেন কোনো ঢ জন্য প্যাটার্ন চিহ্নিত. Recursion সত্যিই একটি শক্তিশালী হাতিয়ার, তাই অবশ্যই এটি সীমাবদ্ধ নয় গাণিতিক ফাংশন. Recursion খুব কার্যকরভাবে ব্যবহার করা যাবে উদাহরণস্বরূপ গাছ সঙ্গে যখন কারবারী. একটি জন্য গাছ ছোট দেখুন আরো পুঙ্খানুপুঙ্খ পর্যালোচনা, কিন্তু এখন জন্য , যে বাইনারি অনুসন্ধান গাছ প্রত্যাহার বিশেষ ব্যবহারের প্রতি, নোড আপ করা হয় একটি মান এবং দুই নোড পয়েন্টার দিয়ে. সাধারণত, এই প্রতিনিধিত্ব করেন এক লাইন প্রতি নির্দেশ থাকার মূল নোড বাম সন্তানের নোড এবং এক ডান সন্তানের নোডের. একটি বাইনারি অনুসন্ধান গঠন গাছ নিজেই ভাল ধার একটি recursive সার্চ করতে. recursive কল মধ্যে পাসের বাম বা ডান নোড, কিন্তু আরও গাছ সংক্ষেপে যে. আপনার উপর একটি অপারেশন সম্পাদন করতে চান বলুন একটি বাইনারি ট্রি মধ্যে প্রতি একক নোড. আপনি কিভাবে যে সম্পর্কে যেতে পারে? হ্যাঁ, আপনি একটি recursive লিখতে পারেন অপারেশন সঞ্চালিত ফাংশন ঊর্ধ্বতন নোডের উপর এবং একটি recursive করে তোলে একই ফাংশন কল, বাম পাশ করার এবং ডান সন্তানের নোড. উদাহরণস্বরূপ, এই ফাংশন, foo বিন্যাস, যে একটি নির্দিষ্ট নোড এর মান এবং পরিবর্তন 1 তার সন্তানদের সব. একটি নাল নোড কারণ বেস কেস ফাংশন ইঙ্গিত, ফিরে যাও কোনো নোড আছে না যে যে সাব - ট্রি বাকি. এর এটা ভিতর দিয়ে হেটে যাক. প্রথম ঊর্ধ্বতন 13 হয়. আমরা 1 থেকে মান পরিবর্তন, এবং তারপর কল আমাদের বাম ফাংশন হিসাবে ভাল সঠিক হিসাবে. ফাংশন, foo বিন্যাস, বাম বলা হয় প্রথম সাব - ট্রি, তাই বাম নোড 1 এবং foo বিন্যাস করতে পুনরায় নির্ধারণ করা হবে যে নোড এর শিশুদের আহ্বান করা, প্রথম বাম এবং তারপর ডান, এবং তাই এবং তাই ঘোষণা. এবং শাখা নেই তাদের বলুন কোন শিশু যাতে একই প্রক্রিয়া ডান শিশুদের জন্য অব্যাহত থাকবে পুরো গাছ এর নোড পর্যন্ত 1 থেকে পুনরায় নির্ধারণ. যেহেতু আপনি দেখতে পারেন, আপনি সীমাবদ্ধ নয় শুধু একটা recursive কল. কাজ শেষ হবে শুধু হিসাবে অনেক. আপনি একটি গাছ ছিল কি যদি যেখানে প্রতিটি নোড তিনটি সন্তান ছিল, বাম, মধ্যম, এবং ডান? আপনি কিভাবে foo বিন্যাস সম্পাদনা করতে চান? ভাল, সহজ. শুধু অন্য recursive কল যোগ করা এবং মাঝখানে নোড পয়েন্টার পাস. Recursion খুব শক্তিশালী এবং না করা হয় মার্জিত উল্লেখ, কিন্তু এটি একটি হতে পারে প্রথমে কঠিন ধারণা, তাই হতে রোগী এবং আপনার সময় লাগবে. বেস কেস দিয়ে শুরু করুন. এটি সাধারণত চিহ্নিত সহজে, এবং তারপর আপনি কাজ করতে পারেন পিছন দিকে সেখানে থেকে. আপনি পৌঁছানোর প্রয়োজন জানেন আপনার বেস কেস, তাই যে যথাসাধ্য আপনি কয়েক নির্দেশ দিতে. এক নির্দিষ্ট ক্ষেত্রে প্রকাশ করার চেষ্টা করুন অন্যান্য ক্ষেত্রে শর্ত, অথবা উপ - কেতা. এই ছোট দেখার জন্য ধন্যবাদ. অন্ততপক্ষে, এখন আপনি করতে পারেন ভালো ঢামালি বুঝতে. আমার নাম Zamyla, এবং এই CS50 হয়. হাই, এই ফাংশন নিয়ে যান, একটি লাগে অকার্যকর ফাংশন কোন int, এন, ইনপুট হিসেবে. বেস কেস আসে প্রথম. এন কম 0, মুদ্রণ যদি "বিদায়" এবং বিনিময়ে.