পুনরাবৃত্ত সংস্করণটি কেন বেশি সময় নেয়?


11

আমি http://programming.lispdream.com/blog/2011/06/recursion-vs-iteration/ এ সন্ধান করছিলাম এবং আমি দেখেছিলাম যে তার পুনরাবৃত্ত এবং পুনরাবৃত্তি বাস্তবায়নের বাস্তবায়নের ক্ষেত্রে পুনরাবৃত্তিটি আসলে আরও বেশি সময় নেয় প্রদত্ত এন = 1,000 আমি বুঝতে পারি না কেন (তিনি ব্যাখ্যা করেন না, তবে বলেছেন যে এটি পাঠকের জন্য অনুশীলন)। এই সমস্ত আমার নতুনত্ব জন্য দুঃখিত।

উত্তর:


10

দুটি প্রোগ্রাম সমতুল্য নয়। পুনরাবৃত্ত সংস্করণ কম্পিউটিং হয়

(... ((1 * 2) * 3) * 4 ... * এন)

যখন পুনরাবৃত্তিটি একটি গণনা করছে

(... ((এন * (এন -1)) * (এন -২) ... * 1)

এইভাবে মধ্যবর্তী পরিমাণগুলি পুনরাবৃত্ত সংস্করণের জন্য আরও দ্রুত বৃদ্ধি পাচ্ছে এবং জড়িত সংখ্যাগুলি যখন ছোট হয় তখন বড় সংখ্যা গণনা তত দ্রুত হয় (1000 গণনা করা! বড় সংখ্যা ছাড়াই কোনও অর্থে থাকে না এবং স্বয়ংক্রিয়ভাবে লিস্প ডায়ালেক্ট স্যুইচ হয়)।


1

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


1
আপনি প্রোগ্রাম তাকান? পুনরুক্তিযুক্ত ফ্যাক্টরিয়াল কোনও স্ট্যাককে মোটেই হেরফের করে না।
এপ্রোগ্রামার

-1

আমি কেবল অনুমান করতে পারি, আমি নিশ্চিত না যে এই মানদণ্ডগুলি সি থেকে বা এসবিএলসি কোড থেকে রয়েছে কিনা। আমার ধারণা অপরাধীটি পরিবর্তনশীলকে পরিবর্তন করতে চলেছে। 1000! এটি বেশ বড় একটি সংখ্যা, সম্ভবত কোনও অনুলিপি তৈরি করার চেয়ে মধ্যস্থতাকারীদের সাথে স্ট্যাক পপুলেশন করা এবং পরিষ্কার করা আরও দ্রুত।


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