সমস্ত পুনরাবৃত্ত ফাংশন পুনরাবৃত্তির সাথে কোড করা যায়? [বন্ধ]


10

পুনরাবৃত্তি সুবিধা কি কি?

কিছু প্রোগ্রামিং ল্যাঙ্গুয়েজ লেজ পুনরাবৃত্তিকে অনুকূল করে তুলতে পারে তবে সাধারণ শর্তে পুনরাবৃত্তি নিয়মিত লুপের চেয়ে বেশি সংস্থান গ্রহণ করে।

কিছু পুনরাবৃত্তি ফাংশনের একটি পুনরাবৃত্তি সংস্করণ থাকা কি সম্ভব?



উত্তর:


10

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

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

আমি আপনাকে সাধারণত একটি মেশিন কোডে এটি প্রয়োগ করা হয় তা দেখতে একটি সংকলক বই অধ্যয়ন করার পরামর্শ দিচ্ছি।


আমি এটা পাই. সুতরাং, পুনরাবৃত্তি কি সুবিধা হবে? সরলতা?
অস্কারআয়েজ

2
@ অস্কার রাইজ: হ্যাঁ, এবং এটি আরও মার্জিত।
মাইকেল কে

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

15

পুনরাবৃত্তি প্রায়শই পুনরাবৃত্তির চেয়ে জিনিসগুলির দিকে তাকানোর আরও প্রাকৃতিক উপায়। উদাহরণস্বরূপ, বাইনারি গাছের আন্ডার ট্র্যাভারসাল বিবেচনা করুন: inorder(left); process(); inorder(right);স্পষ্টভাবে স্ট্যাক বজায় রাখার চেয়ে অনেক সহজ।

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

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

লেজ পুনরুক্তি ফাংশন সহজেই লুপগুলিতে অনুবাদ করা যেতে পারে, এবং একটি স্ট্যাকের প্রয়োজন হয় না, তবে এটি একটি বিশেষ ক্ষেত্রে।


8
আমি বলব যে ডান সবসময় দ্রুত চেয়ে ভাল। যে কোডটি খুব তাড়াতাড়ি ভুল কাজ করে তা কারও পক্ষে খুব ভাল না।
ম্যাসন হুইলারের

1
তবে আপনি যদি এই ভুল কাজটি সত্যিই দ্রুত করতে পারেন তবে কী ?!
রেশনালজিক

1
@ জেকোহেলহেপ - আমি তাত্ক্ষণিকভাবে কোনও সমস্যা সমাধান করতে পারি। উত্তরটি 0 টি
দ্রষ্টব্য -

2
সুস্পষ্ট স্ট্যাকের চেয়ে পুনরাবৃত্তি ব্যবহার করা আরও কার্যকর হতে পারে - গাদা বরাদ্দ, সম্ভাব্য মেমরি বিভাজন এবং সম্ভাব্য স্থানীয় সমস্যাগুলির প্রয়োজনীয়তা এড়ানো। যাইহোক, "ডানদিকে দ্রুত স্বাভাবিকের চেয়ে ভাল", আপনার সফ্টওয়্যারটি হ্যান্ডেল করার ক্ষেত্রে ওভারফ্লো স্ট্যাক করা মানে আপনার কোডটি নষ্ট হয়ে গেছে। সাধারণত, সমস্যাগুলির কেসগুলি সন্ধান করা মোটামুটি সহজ a , এটি সাধারণ পরীক্ষায় বেঁচে থাকতে পারে এবং বাস্তবের জন্য নিযুক্তকালে কেবল ক্রাশ হয়।
স্টিভ 314

1
আমি মনে করি আপনি সকলেই ম্যাসন বলতে কী বোঝেন এবং এটির মজাদার জন্য রসিকতা করছেন। অবশ্যই একটি ধীরে ধীরে সঠিক প্রোগ্রাম একটি দ্রুত ভুল প্রোগ্রামের চেয়ে বেশি কার্যকর।
জর্জিও

4

পুনরাবৃত্তি সুবিধা কি কি?

হ্যানয় সমস্যার টাওয়ারগুলি পুনরাবৃত্তভাবে সমাধান করার চেষ্টা করুন। একবার ছেড়ে দিলে পুনরাবৃত্ত সমাধানটি একবার দেখুন এবং এটি পুনরাবৃত্তির সাথে তুলনা করুন। কোনটি সহজ?

কিছু পুনরাবৃত্তি ফাংশনের একটি পুনরাবৃত্তি সংস্করণ থাকা কি সম্ভব?

হ্যাঁ, নীতিগতভাবে। তবে গাছের ট্র্যাভারসালগুলির মতো খুব সাধারণ কাজ সহ অনেক সমস্যার জন্য, পুনরাবৃত্ত সমাধানগুলি পুনরাবৃত্তকারীগুলির চেয়ে অনেক সহজ এবং আরও মার্জিত।


3

পুনরাবৃত্তি সুবিধা কি কি?

সরলতা। টেল-কল অপ্টিমাইজেশন ছাড়া এটি অবশ্যই আরও সংস্থান গ্রহণ করে (স্ট্যাক), তবে আপনি কীভাবে প্রয়োগ করবেন, বলুন, deltreeপুনরাবৃত্তি না করে জাভাতে? মোড়টি হ'ল delete()ডিরেক্টরিগুলি কেবল খালি থাকলে মুছতে পারে; এটি পুনরাবৃত্তি সঙ্গে এখানে:

deltree(File fileOrDirectory) {
    if (fileOrDirectory.isDirectory()) {
        for (File subFileOrDirectory : fileOrDirectory.listFiles()) {
            deltree(subFileOrDirectory);
        }
    }
    fileOrDirectory.delete();
}

1
অন্যান্য উত্তর দ্বারা উল্লিখিত হিসাবে একটি স্ট্যাক সহ।
নিকোল

হ্যাঁ, তবে এটি কতটা সহজ? -)
জুনাস পুলাক্কা

ওহ, পুনরাবৃত্তি অবশ্যই ভাল। আমি ভেবেছিলাম আপনি বলছেন এটি সম্ভব ছিল না।
নিকোল

0

আমি বিশ্বাস করি যে প্রোগ্রামারকে অবশ্যই বাঁচতে হবে সেই সরঞ্জামগুলির মধ্যে একটি পুনরাবৃত্তি । পুনরাবৃত্তির সাহায্যে আপনি আপনার অ্যালগরিদমগুলি "চিন্তা" করতে পারেন এবং ঠিক যেমনটি আপনি এ সম্পর্কে ভেবেছিলেন সেগুলি সমাধান করতে পারেন। তবে, আমি আপনাকে অবশ্যই সতর্ক করে দেব, প্রত্যেকেই বলছে যে কত সুন্দর পুনরাবৃত্তি হয় এবং কোডটিতে সরলতা কতটা নিয়ে আসে, সে সম্পর্কে আমার কিছু কথা বলতে হবে:

  1. প্রথমত, অ্যালগরিদমের "পুনরাবৃত্ত উপায়" চিন্তা করা সহজ নয়। ফ্যাকটোরিয়াল (এন!) বা হ্যানয় টাওয়ার্সের মতো কোনও ক্রিয়াকলাপ তৈরি করা আইসবার্গের কেবলমাত্র টিপস এবং নীচে পৌঁছতে দীর্ঘ সময় প্রয়োজন।
  2. ভাববেন না যে পুনরাবৃত্তিটি কেবল আপনার কোডের মধ্যেই সরলতা নিয়ে আসে, কখনও কখনও, পুনরাবৃত্তির উপায়টি কুৎসিত এবং অগোছালো তবে ব্যয়বহুল (

এই জিনিসগুলি মনে রেখে, পুনরাবৃত্তি শিখুন! এটি মজার, জটিল এবং এটি আপনার মস্তিষ্ককে আঘাত করবে!

শুভকামনা করছি!

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