লুপটি কি অভ্যন্তরীণভাবে একটি পুনরাবৃত্তি হয়?


37

আমি ভাবলাম কিছুক্ষণ লুপটি অভ্যন্তরীণভাবে একটি পুনরাবৃত্তি কিনা?

আমি মনে করি এটি কারণ কিছুক্ষণ লুপ একটি ফাংশন হিসাবে দেখা যেতে পারে যা শেষে নিজেকে কল করে। যদি এটি পুনরাবৃত্তি না হয়, তবে পার্থক্য কী?



13
আপনি পুনরাবৃত্তিকে পুনরাবৃত্তিতে রূপান্তর করতে পারেন এবং বিপরীতে হ্যাঁ। এর অর্থ এই নয় যে তারা একই, তাদের কেবল একই ক্ষমতা রয়েছে। এমন সময় আছে যখন পুনরাবৃত্তি বেশি প্রাকৃতিক হয় এবং এমন সময়ও আসে যেখানে পুনরাবৃত্তি আরও প্রাকৃতিক হয়।
পলিনোগোম করুন

18
@ মুভিংডাক আপনি প্রবর্তনের মাধ্যমে প্রমাণ করতে পারবেন যে কোনও পুনরাবৃত্তি পুনরাবৃত্তি হিসাবে এবং তার বিপরীতে লেখা যেতে পারে। হ্যাঁ, এটি দেখতে খুব আলাদা হবে তবে আপনি তা সত্ত্বেও এটি করতে পারেন।
বহুবিবাহ

6
কী অন্তর্নিহিত একই গড় এখানে? প্রোগ্রামিংয়ে, পুনরাবৃত্তি ব্যবহারের অর্থ একটি নির্দিষ্ট জিনিস, যা পুনরাবৃত্তির (লুপগুলি) থেকে পৃথক। সিএসে, আপনি যখন তাত্ত্বিক গণিতের দিকগুলির কাছাকাছি চলে যান, তখন এই জিনিসগুলি কিছুটা আলাদা জিনিস বোঝাতে শুরু করে।
হাইড

3
@ মুভিংডাক পুনরাবৃত্ত থেকে পুনরাবৃত্তিতে রূপান্তরটি আসলে বেশ তুচ্ছ। ফাংশন কলগুলির জন্য আপনি কেবল ফাংশন-কল প্যারামিটারগুলির একটি স্ট্যাক এবং ফলাফলের একটি স্ট্যাক রেখেছেন। আপনি কল স্ট্যাকের পরামিতি যুক্ত করে পুনরাবৃত্ত কলগুলি প্রতিস্থাপন করুন। অবশ্যই স্ট্যাকের সমস্ত হ্যান্ডলিং রয়েছে যা অ্যালগরিদমের কাঠামোকে কিছুটা ভেঙে দেয়, তবে আপনি একবার বুঝতে পারলে কোডটি একই কাজ করে তা দেখতে খুব সহজ। মূলত আপনি স্পষ্টভাবে কল স্ট্যাক লিখছেন যা পুনরাবৃত্ত সংজ্ঞাগুলিতে অন্তর্ভুক্ত।
বাকুরিউ

উত্তর:


116

লুপগুলি পুনরাবৃত্তি নয় । আসলে, তারা বিপরীত প্রক্রিয়াটির প্রধান উদাহরণ : পুনরাবৃত্তি

পুনরাবৃত্তির বিষয়টি হ'ল প্রক্রিয়াজাতকরণের একটি উপাদান নিজেকে অন্য একটি উদাহরণ বলে । লুপ নিয়ন্ত্রণ যন্ত্রটি কেবল যেখানে শুরু হয়েছিল সেখানে ফিরে আসে।

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

এই ক্ষমতাটি অনেক পুনরাবৃত্তির অ্যালগোরিদমগুলি কাজ করার জন্য গুরুত্বপূর্ণ, এবং এ কারণেই আপনি পুনরাবৃত্তির মাধ্যমে পুনরাবৃত্তি অনুকরণ করতে পারবেন না নামক ফ্রেমের স্ট্যাক পরিচালনা না করে যা এই সমস্ত মানকে ট্র্যাক করে।


10
@ জর্জিও এটি সত্য হতে পারে, তবে এটি উত্তর দাবি করে না এমন একটি দাবির বিষয়ে একটি মন্তব্য। "নির্বিচারে" এই উত্তরে উপস্থিত নেই এবং তাৎপর্যপূর্ণভাবে অর্থ পরিবর্তন করতে পারে।
এইচডিভি

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

15
@ জিয়েরজিও "এটি হ'ল পুনরাবৃত্তি যা করে: নিজেকে নতুন যুক্তি দিয়ে কল করুন" - কল ব্যতীত। এবং যুক্তি।
hobbs

12
@ জর্জিও আপনি এখানে সবচেয়ে বেশি শব্দ শব্দের সংজ্ঞা ব্যবহার করছেন। শব্দগুলি, আপনি জানেন, যোগাযোগের ভিত্তি। এটি প্রোগ্রামাররা, সিএস স্ট্যাক এক্সচেঞ্জ নয়। যদি আমরা আপনার পরামর্শ অনুসারে "যুক্তি", "কল", "ফাংশন" ইত্যাদি শব্দ ব্যবহার করি তবে আসল কোড সম্পর্কে আলোচনা করা অসম্ভব।
হাইড

6
@ জর্জিও আমি বিমূর্ত ধারণাটি দেখছি। আপনি পুনরাবৃত্তি যেখানে ধারণা এবং আপনি লুপ যেখানে ধারণা আছে। এগুলি ভিন্ন ধারণা। হবসগুলি 100% সঠিক যে কোনও যুক্তি নেই এবং কোনও কল নেই। এগুলি মূলত এবং বিমূর্তভাবে পৃথক। এবং এটি ভাল কারণ তারা বিভিন্ন সমস্যা সমাধান করে। অন্যদিকে, আপনি যখন আপনার একমাত্র সরঞ্জামটি পুনরাবৃত্তি হয় তখন আপনি কীভাবে লুপগুলি প্রয়োগ করতে পারেন তা সন্ধান করছেন। অদ্ভুত আপনি হবসকে বলছেন বাস্তবায়ন সম্পর্কে চিন্তাভাবনা বন্ধ করুন এবং যখন আপনার পদ্ধতিটি সত্যিকারভাবে পুনর্নির্ধারণের প্রয়োজন তখন ধারণাগুলি সন্ধান শুরু করুন।
কর্সিকা

37

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

উভয় ক্ষেত্রেই লোকেরা আপনাকে বুঝতে পারবে না যদি আপনি কোনও ফাংশনকে পুনরাবৃত্ত বলে থাকেন তবে এতে কিছুক্ষণ লুপ থাকে।

* যদিও সম্ভবত কেবল অপ্রত্যক্ষভাবেই, উদাহরণস্বরূপ যদি আপনি এটি শর্তে সংজ্ঞায়িত করেন fold


4
পরিষ্কার কথা বলতে গেলে, কোনও সংজ্ঞাতে ফাংশনটি পুনরাবৃত্ত হয় না। এটিতে একটি পুনরাবৃত্ত উপাদান রয়েছে, লুপ।
লুয়ান

@ লুয়ান: অবশ্যই, তবে যেহেতু রিক্রুটিভিটি যুক্ত ভাষাগুলি whileসাধারণত ফাংশনগুলির সম্পত্তি, তাই আমি এই প্রসঙ্গে "পুনরাবৃত্ত" হিসাবে বর্ণনা করার মতো আর কিছু ভাবতে পারি না।
আন্তন গোলভ

36

এটি আপনার দৃষ্টিভঙ্গির উপর নির্ভর করে।

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

অনেক প্রোগ্রামিং ভাষা পুনরাবৃত্তি এবং পুনরাবৃত্তির সাথে একই আচরণ করে না এবং সঙ্গত কারণেই। সাধারণত , পুনরাবৃত্তির অর্থ ভাষা / সংকলক কল স্ট্যাক পরিচালনা করে এবং পুনরাবৃত্তির অর্থ আপনাকে নিজেরাই স্ট্যাক হ্যান্ডলিং করতে হতে পারে।

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

সুতরাং না, তারা অভ্যন্তরীণভাবে এক নয় । এইগুলি হল সমানভাবে ভাবপূর্ণ , আপনি Compute কিছু iteratively এই আপনি recursively গনা করতে পারে না এবং ভাইস অর্থ করতে পারবেন বিপরীতভাবে, কিন্তু এটা সম্পর্কে যে, সাধারণ ক্ষেত্রে (চার্চ-টুরিং থিসিস অনুযায়ী)।

নোট করুন যে আমরা এখানে পুনরাবৃত্ত প্রোগ্রামগুলি সম্পর্কে কথা বলছি । পুনরাবৃত্তির অন্যান্য রূপ রয়েছে যেমন, ডেটা স্ট্রাকচারে (যেমন গাছ)।


আপনি যদি বাস্তবায়নের দিক থেকে এটি দেখে থাকেন তবে পুনরাবৃত্তি এবং পুনরাবৃত্তি একরকম নয় পুনরাবৃত্তি প্রতিটি কলের জন্য একটি নতুন স্ট্যাক ফ্রেম তৈরি করে। পুনরাবৃত্তির প্রতিটি পদক্ষেপ স্ব-অন্তর্নিহিত, কলি (নিজে থেকেই) থেকে গণনার পক্ষে যুক্তি পেয়ে থাকে।

অন্যদিকে লুপগুলি কল ফ্রেম তৈরি করে না। তাদের জন্য, প্রতিটি পদক্ষেপে প্রসঙ্গ সংরক্ষণ করা হয় না। লুপটির জন্য, লুপের শর্তটি ব্যর্থ না হওয়া পর্যন্ত প্রোগ্রামটি কেবল লুপের শুরুতে ফিরে আসে।

এটি জেনে রাখা বেশ গুরুত্বপূর্ণ, যেহেতু এটি বাস্তব বিশ্বে বেশ মৌলিক পার্থক্য করতে পারে। পুনরাবৃত্তির জন্য, প্রতিটি কলটিতে পুরো প্রসঙ্গটি সংরক্ষণ করতে হবে। পুনরাবৃত্তির জন্য, কী ভেরিয়েবলগুলি মেমরিতে থাকে এবং কোথায় সেভ হয় সে সম্পর্কে আপনার সুনির্দিষ্ট নিয়ন্ত্রণ রয়েছে।

আপনি যদি সেভাবে এটি দেখতে পান তবে আপনি দ্রুত দেখতে পাবেন যে বেশিরভাগ ভাষার ক্ষেত্রে পুনরাবৃত্তি এবং পুনরাবৃত্তি মূলত পৃথক এবং পৃথক বৈশিষ্ট্য রয়েছে। পরিস্থিতির উপর নির্ভর করে কিছু সম্পত্তি অন্যদের চেয়ে বেশি পছন্দসই।

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


স্থানীয় ভেরিয়েবল এবং পুনরাবৃত্তি সহ একটি ভাষা কিন্তু কোনও অ্যারে এমন কার্য সম্পাদন করতে পারে নি যা স্থানীয় ভেরিয়েবল এবং কোনও অ্যারে সহ পুনরাবৃত্ত ভাষায় সম্পাদন করা যায় না। উদাহরণস্বরূপ, কোনও ইনপুটটিতে অজানা দৈর্ঘ্যের একটি বর্ণমালা স্ট্রিং রয়েছে তার পরে ফাঁকা এবং তারপরে বিপরীত ক্রমে মূল স্ট্রিংয়ের অক্ষর রয়েছে কিনা তা রিপোর্ট করুন।
15-29

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

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

1
যদি ভাষাটি সম্পূর্ণরূপে টিউরিং না করে তবে এর অর্থ শুরু করা অর্থহীন। ডিএফএগুলি বিচ্ছিন্নভাবে পুনরাবৃত্তি করতে পারে না বা পুনরাবৃত্তি বিটিডব্লুও করতে পারে না।
পলিনোগোম করুন

2
কোনও বাস্তবায়ন আসলে টিউরিং-সম্পূর্ণ হয় না এবং টিউরিং-সম্পূর্ণ নয় এমন ভাষাগুলি বিভিন্ন উদ্দেশ্যে কার্যকর হতে পারে। সীমাবদ্ধ পরিসরের সাথে এএ সসীম সংখ্যার ভেরিয়েবলের সাথে চালিত যে কোনও প্রোগ্রাম একটি ডিএফএ দ্বারা সমন্বিত হতে পারে যেখানে মানগুলির প্রতিটি সম্ভাব্য সংমিশ্রণ একটি পৃথক রাষ্ট্র state
সুপারক্যাট

12

পার্থক্য হ'ল অন্তর্নিহিত স্ট্যাক এবং শব্দার্থক।

এমন একটি লুপ যা "শেষে নিজেকে কল করে" এর কাজ শেষ হয়ে যাওয়ার পরে ব্যাক আপ করার কোনও স্ট্যাক থাকে না। এটি শেষ পুনরাবৃত্তিটি নির্ধারণ করে যে এটি শেষ হওয়ার সাথে সাথে কী অবস্থা হবে।

পূর্বে করা কাজের অবস্থা মনে রাখে এমন এই অন্তর্নির্মিত স্ট্যাক ব্যতীত পুনরাবৃত্তি করা যাবে না।

এটি সত্য যে আপনি কোনও স্ট্রাকের স্পষ্টভাবে অ্যাক্সেস দিলে পুনরাবৃত্তি সহ যে কোনও পুনরাবৃত্তি সমস্যা সমাধান করতে পারেন। তবে সেভাবে করা এক নয়।

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

রিকার্সিভ কোড একটি সমস্যাটিকে ফ্র্যাক্টাল হিসাবে বিভক্ত করে। এই ছোট্ট অংশটি বড় অংশটির মতো দেখাচ্ছে যাতে আমরা এটির কিছুটা এবং এটির কিছুটা একইভাবে করতে পারি same সমস্যাগুলি সম্পর্কে চিন্তাভাবনা করার এটি আলাদা উপায়। এটি খুব শক্তিশালী এবং অভ্যস্ত হয়ে ওঠে। কয়েকটি লাইনে অনেক কিছুই বলা যায়। আপনি এটি স্ট্যাকের অ্যাক্সেস পেয়েও লুপ লুপের বাইরে বের করতে পারবেন না।


5
আমি মনে করি "অন্তর্নিহিত স্ট্যাক" বিভ্রান্তিকর। পুনরাবৃত্তি একটি ভাষার শব্দার্থবিজ্ঞানের অংশ, বাস্তবায়নের বিশদ নয়। (অনুমোদিত, বেশিরভাগ পুনরাবৃত্তি-সমর্থনকারী ভাষা কল স্ট্যাক ব্যবহার করে; তবে প্রথমত, এই জাতীয় কয়েকটি ভাষা ব্যবহার করে না এবং দ্বিতীয়ত, এমনকি যে ভাষাগুলিও করে না, প্রতিটি পুনরাবৃত্তি কল কল স্ট্যাকের সাথে যুক্ত হয় না, যেহেতু অনেকগুলি ভাষা যেমন অপ্টিমাইজেশন সমর্থন করে লেজ কল বর্জন হিসাবে ।
রুখ

2
@রুখ আমি এমন একটি ফাংশন নিয়ে তর্ক করব যা টেল কল নির্মূলের মাধ্যমে ধ্রুবক স্থানে সঞ্চালিত হয় এটি একটি লুপ। এখানে স্ট্যাকটি বাস্তবায়নের বিশদ নয়, এটি বিমূর্ততা যা আপনাকে বিভিন্ন স্তরের পুনরাবৃত্তির জন্য বিভিন্ন রাজ্যে জমা করতে দেয়।
Cimbali

@রুখ: একক পুনরাবৃত্ত কলের মধ্যে যে কোনও রাজ্য একটি অন্তর্ভুক্ত স্ট্যাকে সংরক্ষণ করা হবে, যতক্ষণ না সংকলক দ্বারা পুনরাবৃত্তি পুনরাবৃত্তি লুপে রূপান্তর করতে পারে। লেঙ্গুড় কল বর্জন হয় একটি বাস্তবায়ন বিস্তারিত, এক যা করে আপনি যদি আপনার ফাংশন পুনঃসংগঠিত করার লেজ-রিকার্সিভ হতে চান সচেতন হতে হবে। এছাড়াও, "এই জাতীয় কয়েকটি ভাষা" না - আপনি কি এমন ভাষাগুলির একটি উদাহরণ প্রদান করতে পারেন যার পুনরাবৃত্তি কলগুলির জন্য স্ট্যাকের প্রয়োজন নেই?
গ্রো


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

7

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

আসল প্রশ্নটি হ'ল: পুনরাবৃত্তি (লুপস) এবং পুনরাবৃত্তিগুলির মধ্যে পার্থক্য করা কখনই বোধগম্য হয় এবং এটিকে একই জিনিস হিসাবে ভাবা কখন কার্যকর? উত্তরটি হ'ল আসলে প্রোগ্রামিং করার সময় (গণিতের প্রমাণগুলি লেখার বিপরীতে) পুনরাবৃত্তি এবং পুনরাবৃত্তির মধ্যে পার্থক্য করা গুরুত্বপূর্ণ to

পুনরাবৃত্তি একটি নতুন স্ট্যাক ফ্রেম তৈরি করে, অর্থাৎ প্রতিটি কলের জন্য স্থানীয় ভেরিয়েবলগুলির একটি নতুন সেট। এটির ওভারহেড রয়েছে এবং স্ট্যাকের উপরে স্থান নেয়, যার অর্থ একটি গভীর পর্যাপ্ত পুনরাবৃত্তি স্ট্যাকটিকে উপচে ফেলতে পারে যা প্রোগ্রামটি ক্র্যাশ করে। অন্যদিকে Iteration কেবল বিদ্যমান পরিবর্তনশীলগুলিকে সংশোধন করে তাই সাধারণত দ্রুত হয় এবং কেবলমাত্র একটি ধ্রুব পরিমাণে মেমরি গ্রহণ করে। সুতরাং এটি একটি বিকাশকারীদের জন্য একটি খুব গুরুত্বপূর্ণ পার্থক্য!

টেল-কল পুনরাবৃত্তি (সাধারণত ক্রিয়ামূলক ভাষা) সহ ভাষাগুলিতে, সংকলকটি পুনরাবৃত্ত কলগুলি এমনভাবে অনুকূল করতে সক্ষম হতে পারে যে তারা কেবল স্থির পরিমাণের স্মৃতি গ্রহণ করে। এই ভাষাগুলিতে গুরুত্বপূর্ণ পার্থক্যটি পুনরাবৃত্তি বনাম পুনরাবৃত্তি নয়, তবে অ-লেজু-কল-পুনরাবৃত্তি সংস্করণ লেজু-কল-পুনরাবৃত্তি এবং পুনরাবৃত্তি।

নীচের লাইন: আপনার পার্থক্যটি বলতে সক্ষম হওয়া দরকার, অন্যথায় আপনার প্রোগ্রামটি ক্রাশ হয়ে যাবে।


3

whileলুপগুলি পুনরাবৃত্তির এক রূপ, দেখুন এই প্রশ্নের স্বীকৃত উত্তর । তারা গণনাযোগ্যতার তত্ত্বের operator-অপারেটরের সাথে মিল রাখে (যেমন এখানে দেখুন )।

forলুপগুলির সমস্ত প্রকারভেদ যা সংখ্যার একটি পরিসীমা, একটি সীমাবদ্ধ সংগ্রহ, একটি অ্যারে ইত্যাদির উপর পুনরাবৃত্তি করে, আদিম পুনরাবৃত্তির সাথে সঙ্গতিপূর্ণ, যেমন এখানে এবং এখানে দেখুন । নোট করুন যে forসি, সি ++, জাভা এবং আরও অনেকগুলি লুপগুলি আসলে একটি whileলুপের জন্য সিনট্যাকটিক চিনি এবং তাই এটি আদিম পুনরাবৃত্তির সাথে সামঞ্জস্য করে না। পাস্কাল forলুপ আদিম পুনরাবৃত্তির একটি উদাহরণ।

একটি গুরুত্বপূর্ণ পার্থক্য হ'ল আদিম পুনরাবৃত্তি সর্বদা শেষ হয়, যেখানে সাধারণীকরণ পুনরাবৃত্তি ( whileলুপস) সমাপ্ত হতে পারে না।

সম্পাদনা

মন্তব্য এবং অন্যান্য উত্তর সম্পর্কিত কিছু স্পষ্টতা ations "কোনও জিনিস যখন নিজের বা তার ধরণের ক্ষেত্রে সংজ্ঞায়িত করা হয় তখন পুনরাবৃত্তি ঘটে।" ( উইকিপিডিয়া দেখুন ) সুতরাং,

লুপটি কি অভ্যন্তরীণভাবে একটি পুনরাবৃত্তি হয়?

যেহেতু আপনি whileনিজের দিক থেকে একটি লুপ সংজ্ঞায়িত করতে পারেন

while p do c := if p then (c; while p do c))

তারপরে, হ্যাঁ , একটি whileলুপ পুনরাবৃত্তির একটি রূপ। রিকার্সিভ ফাংশন হ'ল পুনরাবৃত্তির আরেকটি রূপ (পুনরাবৃত্ত সংজ্ঞাটির অন্য উদাহরণ)। তালিকা এবং গাছগুলি পুনরাবৃত্তির অন্যান্য রূপ।

আরও একটি প্রশ্ন যা প্রত্যক্ষভাবে অনেক উত্তর এবং মন্তব্য দ্বারা অনুমিত হয়

লুপ এবং পুনরাবৃত্ত ফাংশন সমান যখন হয়?

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

সুতরাং, "একটি whileলুপটি পুনরাবৃত্তির এক রূপ" এই সত্যটির সাথে বিরোধী নয় যে "কিছু পুনরাবৃত্তি ফাংশন একটি whileলুপ দ্বারা প্রকাশ করা যায় না "।


2
@ এমরবিডকোড: আদিম পুনরাবৃত্তি এবং rec-পুনরাবৃত্তি হ'ল সুনির্দিষ্ট সীমাবদ্ধতাগুলির (বা এর অভাব) সহ পুনরাবৃত্তিগুলির ফর্মগুলি, যেমন কমপ্যুটেবিলিটি তত্ত্বে অধ্যয়ন করা। দেখা যাচ্ছে যে, কেবল একটি FORলুপের সাথে একটি ভাষা ঠিক সমস্ত আদিম পুনরাবৃত্ত ফাংশনগুলি গণনা করতে পারে, এবং কেবল একটি WHILEলুপের সাথে একটি ভাষা হ'ল সমস্ত rec-পুনরাবৃত্ত ফাংশনগুলি গণনা করতে পারে (এবং এটি দেখা যায় যে rec-রিকার্স ফাংশনগুলি হ'ল সেই ফাংশনগুলি যা একটি ট্যুরিং মেশিন গণনা করতে পারে)। বা, এটি সংক্ষিপ্ত করার জন্য: আদিম পুনরাবৃত্তি এবং µ-পুনরাবৃত্তি হ'ল গণিত / গণনা তত্ত্বের প্রযুক্তিগত পদ।
জার্গ ডব্লু মিট্টাগ

2
আমি ভেবেছিলাম "পুনরাবৃত্তি" নিজেকে কল করে এমন একটি ফাংশন বোঝায় যার ফলস্বরূপ বর্তমান মৃত্যুদন্ড কার্যকর করার স্টেটটি স্ট্যাকের দিকে ধাক্কা দেয় এবং এইভাবে; অতএব আপনি কত স্তরে পুনরাবৃত্তি করতে পারেন তার বেশিরভাগ মেশিনের ব্যবহারিক সীমা রয়েছে। যদিও লুপগুলির কোনও সীমাবদ্ধতা নেই কারণ তারা অভ্যন্তরীণভাবে একটি "জেএমপি" এর মতো কিছু ব্যবহার করবে এবং স্ট্যাকটি ব্যবহার করবে না। শুধু আমার বোঝাপড়া, ভুল হতে পারে।
জয়

13
এই উত্তরটি ওপি ব্যবহার করার চেয়ে "রিকার্সিভ" শব্দের জন্য সম্পূর্ণ আলাদা সংজ্ঞা ব্যবহার করছে এবং এইভাবে এটি অত্যন্ত বিভ্রান্তিকর।
মুগিং হাঁস

2
@ ডেভিডগ্রিনবার্গ: উদ্ধৃতি: "লুপের জন্য সি, সি ++, জাভা আদিম পুনরাবৃত্তির উদাহরণ নয় Pri আদিম পুনরাবৃত্তির অর্থ লুপটি শুরু করার আগে সর্বাধিক সংখ্যক পুনরাবৃত্তি / পুনরাবৃত্তির গভীরতা স্থির করা হয়।" জর্জিও কমপিটেবিলিটি থিওরি আদিম সম্পর্কে কথা বলছেন । প্রোগ্রামিং ভাষার সাথে সম্পর্কিত নয়।
মুগিং হাঁস

3
আমাকে মুইং হাঁসের সাথে একমত হতে হবে যদিও তাত্ত্বিক সিএসে কম্পিউটারের সামঞ্জস্যতা তত্ত্বটি আকর্ষণীয় হতে পারে তবে আমি মনে করি যে সকলেই সম্মত হন যে ওপি প্রোগ্রামিং ভাষা ধারণার বিষয়ে কথা বলছিল।
ভু

2

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

সুতরাং কিছুক্ষণের জন্য লুপটি (সেগুলিতে থাকা ভাষাগুলিতে) এর শরীরে লেজ ডাকার (বা এর মাথা পরীক্ষা) সমাপ্তি হিসাবে দেখা যেতে পারে।

তেমনি, সাধারণ (নন টেল-কল) রিকার্সিভ কলগুলি লুপগুলি (কিছু স্ট্যাক ব্যবহার করে) সিমুলেট করা যায়।

ধারাবাহিকতা এবং ধারাবাহিকতা-পাসিং শৈলী সম্পর্কেও পড়ুন ।

সুতরাং "পুনরাবৃত্তি" এবং "পুনরাবৃত্তি" গভীর সমতুল্য।


1

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

প্রোগ্রামিংয়ের ক্ষেত্রে মৌলিক পার্থক্য হ'ল পুনরাবৃত্তি আপনাকে ডেটা ব্যবহার করতে দেয় যা কল স্ট্যাকে সঞ্চিত হয়। এটি চিত্রিত করার জন্য, ধরে নিন যে আপনি একটি লুপ বা পুনরাবৃত্তি ব্যবহার করে একক সংযুক্ত তালিকার একটি উপাদান মুদ্রণ করতে চান। আমি উদাহরণ কোডের জন্য সি ব্যবহার করব:

 typedef struct List List;
 struct List
 {
     List* next;
     int element;
 };

 void print_list_loop(List* l)
 {
     List* it = l;
     while(it != NULL)
     {
          printf("Element: %d\n", it->element);
          it = it->next;
     }
 }

 void print_list_rec(List* l)
 {
      if(l == NULL) return;
      printf("Element: %d\n", l->element);
      print_list_rec(l->next);
 }

সরল, তাই না? এবার আসুন একটি সামান্য পরিবর্তন করুন: বিপরীত ক্রমে তালিকাটি মুদ্রণ করুন।

পুনরাবৃত্তির বৈকল্পিকের জন্য, এটি মূল ফাংশনে প্রায় তুচ্ছ পরিবর্তন:

void print_list_reverse_rec(List* l)
{
    if (l == NULL) return;
    print_list_reverse_rec(l->next);
    printf("Element: %d\n", l->element);
}

লুপ ফাংশনের জন্য যদিও আমাদের একটি সমস্যা আছে। আমাদের তালিকাটি এককভাবে সংযুক্ত এবং এইভাবে কেবল এগিয়ে যেতে পারে ed তবে যেহেতু আমরা বিপরীতে মুদ্রণ করছি, আমাদের শেষ উপাদানটি মুদ্রণ করতে হবে। একবার আমরা শেষ উপাদানটিতে পৌঁছে গেলে আমরা আর দ্বিতীয় থেকে শেষ উপাদানটিতে ফিরে যেতে পারি না।

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

পুনরাবৃত্তি নিয়ে কেন আমাদের এই সমস্যা নেই? কারণ পুনরাবৃত্তিতে ইতিমধ্যে আমাদের কাছে একটি সহায়ক ডেটা কাঠামো রয়েছে: ফাংশন কল স্ট্যাক।

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


1
অবশ্যই, দ্বিতীয় পুনরাবৃত্তির কাজটি পুচ্ছ-পুনরাবৃত্ত নয় - জায়গার জন্য অনুকূলিতকরণ করা আরও শক্ত কারণ আপনি স্ট্যাকটিকে পুনরায় ব্যবহার করতে টিসিও ব্যবহার করতে পারবেন না। দ্বিগুণ সংযুক্ত তালিকাগুলি কার্যকর করা উপাদানগুলিকে পয়েন্টার / রেফারেন্সের জায়গার ব্যয়ে উভয়ভাবেই অ্যালগরিদমকে তুচ্ছ করে তুলবে।
বাল্ড্রিক 24

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

আমার বক্তব্যটি হ'ল আপনি যদি এই সমস্যায় পড়েন তবে এটি কার্যকর করার জন্য ডিজাইনের অভাবের চেয়ে বেশি, আপনি এটি প্রয়োগ করার জন্য কোন ভাষাটি ব্যবহার করেন এবং প্রতিটি
পছন্দটির

0

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

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

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

নিম্নলিখিত উদাহরণে, জীবনটি হল ফাংশনটি "নিয়ম" এবং "রাষ্ট্র" দুটি পরামিতি নেয় এবং পরের বারের টিকের মধ্যে নতুন রাষ্ট্র নির্মিত হবে।

life rules state = life rules new_state
    where new_state = construct_state_in_time rules state

[1]: একটি নতুন তৈরির পরিবর্তে পুনরাবৃত্ত কলগুলিতে বিদ্যমান ফাংশন স্ট্যাকটি ব্যবহার করতে ফাংশনাল প্রোগ্রামিং ভাষাগুলিতে টেল কল অপ্টিমাইজেশন একটি সাধারণ অপ্টিমাইজেশন।

[2]: কম্পিউটার প্রোগ্রামগুলির গঠন এবং ব্যাখ্যা, এমআইটি। https://mitpress.mit.edu/books/structure-and-interpretation-computer-programs


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

1
ভাল, সম্ভবত এটি আরও বিমূর্ত দৃষ্টিভঙ্গি থেকে দেখার জন্য, যা বিভিন্ন জিনিস বলে মনে হচ্ছে, বাস্তবে ধারণাটি একই। আমার মনে হয় যে এটি হতাশাব্যঞ্জক এবং দু: খজনক বলে মনে হয় যে লোকেদের কিছু উত্তর শেখার সুযোগ হিসাবে গ্রহণ করার পরিবর্তে তাদের প্রত্যাশাগুলির সাথে সামঞ্জস্য না করার কারণে তারা উত্তরগুলি হ্রাস করে। সমস্ত উত্তর যা বলার চেষ্টা করে: "আরে, দেখুন, এই জিনিসগুলি তলদেশে আলাদা দেখায়, তবে আসলে এটি আরও বিমূর্ত স্তরে একই" down এগুলি নিম্নোক্ত করা হয়েছে।
জর্জিও

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

2
@ জ্যাক্কসবি: "উত্তরগুলি যদি আপনি ইতিমধ্যে উত্তরটি জানেন, তবে কথা বলুন, সহায়ক নয় ... কেবলমাত্র সেই উত্তরগুলি বোঝায় যে এটি কেবল পাঠক ইতিমধ্যে জানে বা জানার জন্য যা বোঝে তা নিশ্চিত করে। যদি কোনও উত্তরের পরিভাষাটি পরিস্কার হয় যা পরিষ্কার নয়, ডাউনভোটিংয়ের আগে আরও বিশদ জানতে চাওয়ার জন্য মন্তব্য লেখা সম্ভব to
জর্জিও

4
লুপগুলি পুনরাবৃত্তির কোনও বিশেষ রূপ নয় । গণনীয়তার তত্ত্বটি দেখুন এবং যেমন তাত্ত্বিক WHILE ভাষা এবং calc-ক্যালকুলাস Look হ্যাঁ, কিছু ভাষায় অন্বিত চিনি যেমন loops ব্যবহার আসলে লোকচক্ষুর অন্তরালে পুনরাবৃত্তির ব্যবহার করেন, কিন্তু তারা যে কারণ recursion ও পুনরাবৃত্তির হয় কি করতে পারেন সমানভাবে ভাবপূর্ণ , না, কারণ তারা একই।
পলিগনোম

-1

লুপটি পুনরাবৃত্তির চেয়ে আলাদা।

যখন একটি ফাংশন বলা হয়, নিম্নলিখিত স্থান নেয়:

  1. স্ট্যাকের সাথে একটি স্ট্যাক ফ্রেম যুক্ত করা হয়েছে।

  2. কোড পয়েন্টারটি ফাংশনের শুরুতে চলে যায়।

যখন লুপটি শেষে থাকে তখন নিম্নলিখিতটি ঘটে:

  1. একটি শর্ত জিজ্ঞাসা করে কিছু সত্য কিনা।

  2. যদি তা হয়, কোডটি একটি বিন্দুতে লাফ দেয়।

সাধারণভাবে, সময় লুপটি নিম্নলিখিত সিউডোকোডের অনুরূপ:

 if (x)

 {

      Jump_to(y);

 }

সর্বাধিক গুরুত্বপূর্ণ, পুনরাবৃত্তি এবং লুপগুলির বিভিন্ন সমাবেশ কোড উপস্থাপনা এবং মেশিন কোডের উপস্থাপনা রয়েছে। এর অর্থ তারা এক নয়। তাদের একই ফলাফল থাকতে পারে, তবে বিভিন্ন মেশিন কোড প্রমাণ করে যে তারা 100% একই জিনিস নয়।


2
আপনি একটি প্রক্রিয়া কল এবং কিছুক্ষণের লুপ বাস্তবায়নের বিষয়ে কথা বলছেন এবং যেহেতু সেগুলি আলাদাভাবে প্রয়োগ করা হয়, আপনি সিদ্ধান্তে পৌঁছে যে সেগুলি আলাদা। যাইহোক, ধারণাগতভাবে খুব অনুরূপ।
জর্জিও

1
সংকলকটির উপর নির্ভর করে একটি অপ্টিমাইজড, ইনলাইনড পুনরাবৃত্তি কল প্লেইন লুপ হিসাবে একই সমাবেশটি ভালভাবে তৈরি করতে পারে।
হাইড

@ হাইড ... এটি কেবলমাত্র একটি সুপরিচিত সত্যের উদাহরণ যা একজনের মাধ্যমে অন্যের মাধ্যমে প্রকাশ করা যেতে পারে; এর অর্থ এই নয় যে তারা অভিন্ন। কিছুটা ভর এবং শক্তির মতো। অবশ্যই যে কেউ তর্ক করতে পারে যে অভিন্ন আউটপুট উত্পাদন করার সমস্ত উপায় "একই"। যদি বিশ্ব সসীম হয় তবে সমস্ত প্রোগ্রাম শেষ পর্যন্ত কনসেক্সট্রপ হবে।
পিটার - মনিকা পুনরায়

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

1
@ পিটারএ.স্নাইডার হ্যাঁ, তবে এই উত্তরে "সবচেয়ে গুরুত্বপূর্ণ ... বিভিন্ন বিধানসভা কোড" বলা হয়েছে, যা একেবারেই ঠিক নয়।
হাইড

-1

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

আমি নিশ্চিত নই কেন এটি বিতর্কিত। স্ট্যাক সহ পুনরাবৃত্তি এবং পুনরাবৃত্তি একই গণনা প্রক্রিয়া। তারা একই "ঘটনা", তাই কথা বলতে।

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

স্পষ্ট করার জন্য, প্রশ্নের উত্তরটি কী লুপটি স্বতন্ত্রভাবে পুনরাবৃত্তি হয়? এটি একটি নির্দিষ্ট নম্বর , বা কমপক্ষে "যদি আপনার পাশাপাশি স্ট্যাক না থাকে তবে" নয়।

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