আপনার পুনরাবৃত্তি বোঝার উন্নতির জন্য সংস্থানগুলি? [বন্ধ]


13

আমি জানি পুনরাবৃত্তি কি (যখন কোনও প্যাটেন নিজের মধ্যে পুনরায় শুরু হয়, সাধারণত একটি ফাংশন যা নিজেকে তার লাইনের একটিতে ডাকে ব্রেকআউট শর্তসাপেক্ষ ... ডান?) পরে, এবং যদি আমি সেগুলি ঘনিষ্ঠভাবে অধ্যয়ন করি তবে আমি পুনরাবৃত্ত ফাংশনগুলি বুঝতে পারি। আমার সমস্যাটি হ'ল, যখন আমি নতুন উদাহরণগুলি দেখি, আমি প্রথমে সবসময় বিভ্রান্ত হয়ে যাই। যদি আমি একটি লুপ বা ম্যাপিং, জিপিং, বাসা বাঁধতে, পলিমারফিক কলিং এবং আরও কিছু দেখতে পাই তবে আমি জানি এটি ঠিক কীভাবে চলছে। আমি যখন পুনরাবৃত্তির কোডটি দেখি, তখন আমার চিন্তার প্রক্রিয়াটি সাধারণত 'ডাব্লুটিএফ এটি হয়?' 'ওহ ইট রিকার্সিভ' এর পরে 'আমি অনুমান করি এটি অবশ্যই কাজ করবে, যদি তারা বলে যে এটি কাজ করে।'

সুতরাং আপনার কাছে এই ক্ষেত্রে দক্ষতা বাড়ানোর জন্য কোনও পরামর্শ / পরিকল্পনা / সংস্থান আছে? পুনরাবৃত্তি একটি অদ্ভুত ধারণা তাই আমি এটিকে মোকাবেলা করার উপায়টি ভাবছি একইভাবে অদ্ভুত এবং অচল।


28
Recursion বুঝতে, আপনি প্রথম recursion বুঝতে হবে।
আন্দ্রেয়াস জোহানসন

1
ডাঃ সিউসের লেখা 'ক্যাট ইন হ্যাট কামস ব্যাক', এটি পুরোপুরি কার্যকর নাও হতে পারে, তবে বিড়ালের উপরে পুনরাবৃত্ত কলটি এই উদ্বেগজনক দাগ থেকে মুক্তি পেতে পারে। :-) এটি খুব দ্রুত পড়ার সুবিধাও রয়েছে!
ডি কেটি

2
অনুশীলন, অনুশীলন, অনুশীলন।
ডেভিড থর্নলি

20
ইতিমধ্যে এই প্রশ্নের জবাব দেওয়া হয়েছে: প্রোগ্রামার্স.স্ট্যাকেক্সেঞ্জার
৫7২৪৩/২

3
@ গ্রাহাম বোরল্যান্ড: এটি অসীম পুনরাবৃত্তির একটি উদাহরণ। বেশিরভাগ প্রোগ্রামে, বেস কেসটি মিস করা সাধারণত স্ট্যাকের ওভারফ্লো বা মেমরির বহির্ভূত ত্রুটির কারণ হয়ে থাকে। ওয়েবসাইট ব্যবহারকারীদের জন্য, এটি কেবল বিভ্রান্তির কারণ হতে পারে। ;)
হতাশ

উত্তর:


10

সাধারণ কিছু দিয়ে শুরু করুন এবং এটি পেন্সিল এবং কাগজ দিয়ে সন্ধান করুন। Seriosuly। শুরু করার জন্য একটি ভাল জায়গা হ'ল ট্রি-ট্র্যাভার্সাল অ্যালগরিদমগুলি, যেহেতু তারা নিয়মিত পুনরাবৃত্তির চেয়ে পুনরাবৃত্তি ব্যবহার করে খুব সহজেই পরিচালনা করা হয়। এটি একটি জটিল উদাহরণ হতে হবে না, তবে এমন কিছু যা সহজ এবং আপনি এতে কাজ করতে পারেন।

হ্যাঁ, এটি অদ্ভুত এবং কখনও কখনও পাল্টা স্বজ্ঞাত, তবে এটি একবার ক্লিক করলে একবার আপনি "ইউরেকা!" আপনি আশ্চর্য করব কিভাবে আপনি করা হয়নি এটা আগে বুঝতে! ;) আমি গাছগুলি পরামর্শ দিয়েছিলাম কারণ তারা (আইএমও) পুনরাবৃত্তিতে বোঝার সবচেয়ে সহজ কাঠামো এবং পেন্সিল এবং কাগজ ব্যবহার করে এগুলি কাজ করা সহজ। ;)


1
+1 এইভাবেই আমি এটি আঁকছি। উদাহরণস্বরূপ, যদি আপনি ওও ব্যবহার করে থাকেন তবে পিতামাতার সন্তানের সম্পর্কের সাথে কিছু ক্লাস তৈরি করুন এবং তারপরে কোনও ফাংশন / পদ্ধতি চেষ্টা করুন এবং তৈরি করুন যা কোনও বস্তুর নির্দিষ্ট পূর্বপুরুষ রয়েছে কিনা তা পরীক্ষা করে।
আলব

5

আমি লিটল লিস্পার বইটি ব্যবহার করে স্কিমে দৃ strongly়ভাবে সুপারিশ করছি। একবার তা সম্পন্ন করবেন, আপনি হবে পুনরাবৃত্তির, গভীর নিচে বুঝতে। প্রায় গ্যারান্টিযুক্ত।


1
+1 এই বইটি আমার জন্য সত্যিই এটি করেছে। তবে এটির নামকরণ করা হয়েছিল "দ্য লিটল স্কিমার"
মাইকে 30

4

আমি অবশ্যই এস আই সি পি পরামর্শ দিচ্ছি। এছাড়াও, আপনি লেখকদের পরিচায়ক কোর্স ভিডিও চেক আউট করা উচিত এখানে ; তারা অবিশ্বাস্যভাবে মনের-খোলার হয়।

প্রোগ্রামিংয়ের সাথে এতটা কঠোরভাবে সম্পর্কিত না হয়ে অন্য একটি রাস্তাটি গডেল, এসচার, বাখ: হাফস্টাডটারের একটি চিরন্তন সোনার বেণী পড়ছে । একবার আপনি এটি গর্ত হয়ে গেলে, পুনরাবৃত্তি পাটিগণিত হিসাবে প্রাকৃতিক দেখায়। এছাড়াও, আপনি নিশ্চিত হবেন যে পি = এনপি এবং আপনি চিন্তাভাবনা মেশিনগুলি তৈরি করতে চান - তবে এটি একটি পার্শ্ব-প্রতিক্রিয়া যা সুবিধার সাথে তুলনা করে খুব কম।


জিইবি যেভাবেই পড়ার মতো; এমনকি তিনি যে কয়েকটি বিষয় নিয়ে কথা বলেন তা কিছুটা তারিখযুক্ত হলেও (গত ৪০ বছরে মৌলিক সিএস গবেষণায় কিছু অগ্রগতি হয়েছে) বুনিয়াদি বোঝাপড়া হয় না।
ডোনাল ফেলো

2

মূলত এটি অনুশীলনের জন্য নেমে আসে ... সাধারণ সমস্যাগুলি নিয়ে যান (বাছাই, অনুসন্ধান, গণিত সমস্যা ইত্যাদি) এবং দেখুন আপনি কোনও উপায় দেখতে পারেন যাতে আপনি একাধিকবার একক ফাংশন প্রয়োগ করলে সেই সমস্যাগুলি সমাধান করা যেতে পারে।

উদাহরণস্বরূপ দ্রুত সাজানোর কাজ করে যে এটি একটি তালিকার উপাদানটিকে দুটি অংশে নিয়ে যায় এবং তারপরে আবার সেই সমস্ত অর্ধেকের জন্যই নিজেকে প্রয়োগ করে। প্রাথমিক বাছাইয়ের সময় দুটি অর্ধেকটি সেই সময়ে সাজানোর বিষয়ে উদ্বিগ্ন নয়। বরং এটি পিভট এলিমেন্টটি গ্রহণ করে এবং সমস্ত উপাদানকে একদিকে থেকে সেই উপাদানটির চেয়ে ছোট করে এবং সমস্ত উপাদান অন্যদিকে থেকে বড় বা সমান করে দেয়। এটি কী তা বোঝায় যে এটি কীভাবে পুনরায় ক্রমে দুটি নতুন ছোট তালিকাগুলি বাছাই করতে সেই সময়ে নিজেকে কল করতে পারে? তারা তালিকা। শুধু ছোট। তবে তাদের এখনও বাছাই করা দরকার।

পুনরাবৃত্তির পিছনে শক্তি হ'ল বিভাজন এবং বিজয় ধারণা। সমস্যাটিকে বারবার ছোট সমস্যায় ভাঙ্গুন যা প্রকৃতিতে অভিন্ন তবে কেবল ছোট। যদি আপনি এটি পর্যাপ্তরূপে করেন তবে আপনি এমন একটি পয়েন্টে পৌঁছেছেন যেখানে কেবলমাত্র বাকি টুকরোটি ইতিমধ্যে সমাধান হয়ে গেছে তবে আপনি কেবল লুপ থেকে বেরিয়ে আসার জন্য সমস্যাটি সমাধান করেন এবং সমস্যাটি সমাধান হয়ে যায়। সেই উদাহরণ অধ্যয়ন আপনাকে উল্লেখ যতক্ষণ না আপনি বুঝতে তাদের। এটি কিছুক্ষণ সময় নিতে পারে তবে শেষ পর্যন্ত এটি আরও সহজ হয়ে যায়। তারপরে অন্যান্য সমস্যাগুলি নেওয়ার চেষ্টা করুন এবং সেগুলি সমাধান করার জন্য একটি পুনরাবৃত্ত ফাংশন করুন! শুভকামনা!

সম্পাদনা: আমার অবশ্যই যোগ করতে হবে যে পুনরাবৃত্তি করার জন্য একটি মূল উপাদানটি হ'ল ফাংশনটির গ্যারান্টিযুক্ত ক্ষমতা বন্ধ করতে সক্ষম। এর অর্থ আসল সমস্যাটির ভাঙ্গনটি অবিচ্ছিন্নভাবে ছোট হওয়া উচিত এবং শেষ পর্যন্ত গ্যারান্টিযুক্ত স্টপিং পয়েন্ট হওয়া দরকার (এমন একটি পয়েন্টে যেখানে নতুন সাব সমস্যাটি সমাধানযোগ্য বা ইতিমধ্যে সমাধান করা হয়েছে)।


হ্যাঁ আমি মনে করি আমি এর আগে একটি দ্রুত সাজানোর ব্যাখ্যা দেখেছি, আমি অনুমান করতে পারি যে এটি উপরে আপনার অনুস্মারক থেকে কীভাবে কাজ করে। পুনরাবৃত্তিটি কীভাবে সংবেদনশীল / নমনীয় হয় - বেশিরভাগ সমস্যাগুলি পুনরাবৃত্ত পদ্ধতির (এমনকি এটি সর্বোত্তম না হলেও) জোর করা যায়? আমি নেটগুলিতে কোডিং ধাঁধাটির উত্তর মানুষকে দেখেছি যে বেশিরভাগ লোক প্রক্রিয়াগতভাবে মোকাবেলা করছেন, যেন তারা যখনই কেবল তার নরকের জন্য চান তারা পুনরাবৃত্তি ব্যবহার করতে পারেন। আমি একবারও পড়েছি, আমার মনে হয়, কিছু ভাষা লুপ কনস্ট্রাক্ট প্রতিস্থাপনের জন্য নির্ভর করে বা পুনরাবৃত্তি করে। এবং আপনি গ্যারান্টিযুক্ত স্টপিং পয়েন্ট উল্লেখ করেন। আমি মনে করি those জিনিসগুলির মধ্যে একটি হতে পারে মূল বিষয়।
অ্যান্ড্রু এম

আপনার নিজের তৈরি করার জন্য একটি সহজ সাধারণ প্রারম্ভিক সমস্যাটি হ'ল একটি পুনরাবৃত্ত প্রোগ্রাম যা কোনও সংখ্যার ফ্যাক্টরিয়াল খুঁজে পায় finds
কেনেথ

যে কোনও লুপিং স্ট্রাকচারকে পুনরাবৃত্ত কাঠামোর মধ্যে রাখা যেতে পারে। যে কোনও পুনরাবৃত্তি কাঠামো একটি লুপিং স্ট্রাকচারে রাখা যেতে পারে ... কমবেশি। কখন এবং কখন পুনরাবৃত্তি ব্যবহার করবেন না তা শিখতে সক্ষম হতে সময় এবং অনুশীলনের প্রয়োজন কারণ আপনি মনে রাখতে হবে যে আপনি যখন পুনরাবৃত্তি ব্যবহার করেন তখন হার্ডওয়্যার স্তরে ব্যবহৃত সংস্থানগুলির ক্ষেত্রে প্রচুর ওভারহেড থাকে।
কেনেথ

উদাহরণস্বরূপ, আমি দেখতে পেলাম যে একটি লুপিং কাঠামো তৈরি করা সম্ভব যা দ্রুত সাজানোর কাজ করে ... তবে এটি নিশ্চিত যে হেক একটি রাজকীয় ব্যথা হবে এবং এটি কীভাবে হয়েছে তার উপর নির্ভর করে শেষ পর্যন্ত পুনরাবৃত্তির ক্রিয়াকলাপের চেয়ে আরও বেশি সিস্টেমের সংস্থান ব্যবহার করতে পারে বড় অ্যারে জন্য।
কেনেথ

সুতরাং এখানে আমার বাস্তব চেষ্টাবাদী। ন্যায়সঙ্গত হওয়ার জন্য আমি এটি আগে দেখেছি, এবং যদিও আমি এটি স্ক্র্যাচ থেকে লিখেছি, মেমোরি নয়, এটি সম্ভবত এটির চেয়ে আরও সহজ। এটি জেএসে চেষ্টা করেছিল তবে একটি পার্স ত্রুটি ছিল তবে পাইথনে কাজ করে def factorial(number): """return factorial of number""" if number == 0: return 0 elif number == 1: return 1 else: return number * factorial(number - 1)
অ্যান্ড্রু এম

2

ব্যক্তিগতভাবে আমি অনুভব করি যে অনুশীলনের মাধ্যমে আপনার সেরা বেট।

আমি লোগোর সাথে পুনরাবৃত্তি শিখেছি। আপনি এলআইএসপি ব্যবহার করতে পারেন। এই ভাষাগুলিতে পুনরাবৃত্তি স্বাভাবিক। অন্যথায় আপনি এটিকে গাণিতিক স্যুট এবং সিরিজের অধ্যয়নের সাথে তুলনা করতে পারেন যেখানে আপনি আগে যা ঘটেছিল তার উপর ভিত্তি করে প্রকাশ করেন, যেমন ইউ (এন + 1) = এফ (ইউ (এন)), বা আরও জটিল সিরিজ যেখানে আপনার একাধিক ভেরিয়েবল এবং একাধিক নির্ভরতা, যেমন u (n) = g (u (n-1), u (n-2), v (n), v (n-1)); v (n) = h (u (n-1), u (n-2), v (n), v (n-1)) ...

সুতরাং আমার পরামর্শটি হ'ল আপনি সাধারণ (তাদের অভিব্যক্তিগুলিতে) স্ট্যান্ডার্ড পুনরাবৃত্তি "সমস্যাগুলি" খুঁজে পান এবং আপনার পছন্দের ভাষায় এগুলি প্রয়োগ ও প্রয়োগ করার চেষ্টা করেন। অনুশীলন আপনাকে সেই "সমস্যাগুলি" কীভাবে ভাবতে, পড়তে এবং প্রকাশ করতে শিখতে সহায়তা করবে। মনে রাখবেন যে প্রায়শই এই সমস্যাগুলির মধ্যে কয়েকটি পুনরাবৃত্তির মাধ্যমে প্রকাশ করা যেতে পারে তবে পুনরাবৃত্তি তাদের সমাধানের আরও মার্জিত উপায় হতে পারে। এর মধ্যে একটি হ'ল ফ্যাকটোরিয়াল সংখ্যার গণনা।

গ্রাফিকাল "সমস্যা" আমি দেখতে এটি আরও সহজ করে তোলে। সুতরাং কোচের ফ্লাকস, ফিবোনাচি, ড্রাগনের বক্ররেখা এবং সাধারণভাবে ফ্র্যাক্টালগুলি দেখুন। তবে দ্রুত সাজানোর অ্যালগরিদমটিও দেখুন ...

আপনার মাথা ঘুরিয়ে নেওয়ার আগে আপনাকে কয়েকটি প্রোগ্রাম (অন্তহীন লুপস, অসীম সংস্থাগুলির অস্থায়ী ব্যবহার) ক্র্যাশ করতে হবে এবং শেষ হওয়ার শর্তগুলি (অপ্রত্যাশিত ফলাফল পেতে) ক্র্যাশ করতে হবে। এমনকি যখন আপনি এটি পেয়েছেন আপনি এখনও এই ভুলগুলি করতে পারবেন, কেবল কম প্রায়ই।


2

কম্পিউটার প্রোগ্রামগুলির গঠন এবং ব্যাখ্যা

এটা , শিক্ষা শুধু পুনরাবৃত্তির কিন্তু বিভিন্ন বিশ্ববিদ্যালয়ে সাধারণভাবে প্রোগ্রামিং জন্য ব্যবহৃত বই। এটি সেই ফাউন্ডেশনাল বইগুলির মধ্যে একটি যা আপনার যত বেশি অভিজ্ঞতা অর্জন করবে এবং আপনি এটি তত বেশি পড়বেন তার থেকে আরও বেশি তথ্য পাওয়া যায়।


0

এস আই সি পি এবং গ্যাডেল , এসচার, বাচ: এটার্নাল গোল্ডেন ব্রিড , টুরেটজকির এলআইএসপি : সিম্বলিক কম্পিউটেশনের একটি কোমল ভূমিকাও পুনরাবৃত্তি প্রবর্তনের ক্ষেত্রে একটি ভাল কাজ করে।

প্রাথমিক ধারণাটি হ'ল: প্রথমে আপনাকে জানতে হবে আপনার পুনরাবৃত্ত ফাংশনটি কখন শেষ হয়, সুতরাং এটি কোনও ফলাফল দিতে পারে। তারপরে, আপনাকে কীভাবে অসম্পূর্ণ কেস নিতে হবে তা জানতে হবে এবং এটি এমন কোনও ক্ষেত্রে হ্রাস করতে হবে যা আপনি পুনরাবৃত্তি করতে পারেন। Traditionalতিহ্যবাহী কল্পিত (এন) উদাহরণস্বরূপ, আপনি যখন এন <= 1, এবং অসম্পূর্ণ কেসটি এন * ফ্যাকটোরিয়াল (এন -1) হবে তখন আপনি শেষ করেছেন।

অনেক কৃপণকর উদাহরণের জন্য, অ্যাকারম্যানের ফাংশন এ (এম, এন) রয়েছে।

A(0,n) = n+1.                                   This is the terminal case.
A(m,0) = A(m-1,1) if m > 0.                     This is a simple recursion.
A(m,n) = A(m-1, A(m, n-1)) if m > 0 and n > 0.  This one is ugly.

0

আমি OCaml বা হাস্কেলের মতো কিছু এমএল-স্টাইলের ক্রিয়ামূলক ভাষার সাথে ঘুরে দেখার পরামর্শ দিই। আমি খুঁজে পেয়েছি যে প্যাটার্ন-ম্যাচিং সিনট্যাক্স সত্যই আমাকে এমনকি অপেক্ষাকৃত জটিল পুনরাবৃত্ত ফাংশন বুঝতে সহায়তা করেছে, অবশ্যই স্কিম ifএবং condবিবৃতিগুলির চেয়ে অনেক ভাল । (আমি একই সাথে হাস্কেল এবং স্কিম শিখেছি))

বিপরীতে একটি তুচ্ছ উদাহরণ এখানে:

(define (fib n)
   (cond [(= n 0) 0]
         [(= n 1) 1]
         [else (+ (fib (- n 1)) (fib (- n 2)))]))

এবং প্যাটার্ন মিলের সাথে:

fib 0 = 0
fib 1 = 1
fib n = fib (n - 1) + fib (n - 2)

এই উদাহরণটি সত্যই পার্থক্য বিচার করে না - ফাংশনের কোনও সংস্করণে আমার কখনও সমস্যা হয়নি। দুটি অপশন দেখতে কেমন তা বোঝানোর জন্য এটি। তালিকাগুলি এবং গাছের মতো জিনিসগুলি ব্যবহার করার পরে আপনি আরও জটিল ক্রিয়াকলাপগুলি পেয়ে গেলে পার্থক্যটি আরও স্পষ্ট হয়ে ওঠে।

আমি বিশেষত হাস্কেলকে সুপারিশ করি কারণ এটি খুব সুন্দর বাক্য গঠন সহ একটি সাধারণ ভাষা। এটি কর্কর্সনের মতো আরও উন্নত ধারণার সাথে কাজ করা আরও সহজ করে তোলে :

fibs = 0 : 1 : zipWith (+) fibs (drop 1 fibs)
fib n = fibs !! n

(যতক্ষণ না আপনি হাস্কেলের সাথে কিছুটা খেলেন ততক্ষণ আপনি উপরের কোডটি বুঝতে পারবেন না তবে নিশ্চিত হয়ে নিন যে এটি মূলত যাদুকর: পি।) অবশ্যই আপনি স্কিমের স্রোতে একই কাজ করতে পারতেন তবে হাস্কেলের মধ্যে এটি অনেক বেশি প্রাকৃতিক।


0

এটি মুদ্রণের বাইরে, তবে আপনি যদি এটি খুঁজে পান তবে রিচার্ড লরেন্টজ রচিত "রিকার্সিভ অ্যালগরিদম" পুনরাবৃত্তি ছাড়া কিছুই নয়। এটি পুনরাবৃত্তির মূল বিষয়গুলি পাশাপাশি নির্দিষ্ট পুনরাবৃত্তির অ্যালগরিদমগুলিকে অন্তর্ভুক্ত করে।

উদাহরণগুলি পাস্কলে রয়েছে, তবে এত বড় নয় যে ভাষার পছন্দটি বিরক্তিকর।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.