পুনরূদ্ধার দিয়ে এমন কিছু করা যায় যা লুপগুলি দিয়ে করা যায় না?


126

লুপ ব্যবহারের চেয়ে পুনরাবৃত্তি ব্যবহার করা ভাল এবং পুনরায় ব্যবহারের চেয়ে লুপ ব্যবহার করা ভাল are "ডান" একটি নির্বাচন করা সংস্থান এবং / অথবা কোডের কম লাইনে ফলাফল সংরক্ষণ করতে পারে।

লুপের পরিবর্তে কোনও কাজ কেবল পুনরাবৃত্তি ব্যবহার করে করা যেতে পারে এমন কোনও ঘটনা আছে কি?


13
আমি গুরুতরভাবে এটি সন্দেহ। পুনরাবৃত্তি একটি মহিমান্বিত লুপ।
লাইটনেস রেস

6
উত্তরগুলি যে দিকে চলেছে সেদিকে ঘুরিয়ে দেওয়ার দিকনির্দেশগুলি দেখে (এবং কেবলমাত্র আরও ভাল একটি সরবরাহ করতে নিজেকে ব্যর্থ করে দিয়ে) আপনি যদি আরও কিছুটা পটভূমি সরবরাহ করেন এবং আপনি কী ধরণের উত্তর পরে থাকেন তবে আপনি যে কোনও পক্ষের পক্ষে উত্তর দেওয়ার চেষ্টা করছেন might আপনি কি হাইপোটিকাল মেশিনের জন্য (তাত্পর্যপূর্ণ সীমাহীন স্টোরেজ এবং রান-টাইম সহ) তাত্ত্বিক প্রমাণ চান? বা ব্যবহারিক উদাহরণ? (যেখানে "হাস্যকর জটিল হবে" "সম্পন্ন করা যায় না" হিসাবে যোগ্য হতে পারে)) বা অন্যরকম কিছু?
5gon12eder

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

13
একারম্যান ফাংশন সম্পর্কে কী? en.wikedia.org/wiki/Acermann_function , বিশেষভাবে কার্যকর নয় তবে লুপিংয়ের মাধ্যমে করা অসম্ভব। (আপনি এই ভিডিওটি চেক করতে পারেন youtube.com/watch?v=i7sm9dzFtEI Computerphile দ্বারা)
WizardOfMenlo

8
@ উইজার্ডফফ মেনলো বেফঞ্জ কোডটি ERRE সলিউশন (যা এটি একটি ইন্টারেক্টিভ সমাধান ... একটি স্ট্যাক সহ) একটি বাস্তবায়ন । স্ট্যাক সহ একটি পুনরাবৃত্তি পদ্ধতির পুনরাবৃত্তি কল অনুকরণ করতে পারে। যথাযথ শক্তিশালী যে কোনও প্রোগ্রামিংয়ে, একটি লুপিং কনস্ট্রাক্ট অন্যরকম একটি অনুকরণ করতে ব্যবহার করা যেতে পারে। নির্দেশাবলী সহ রেজিস্টার মেশিন INC (r), JZDEC (r, z)একটি ট্যুরিং মেশিন বাস্তবায়ন করতে পারে। এটির কোনও 'পুনরাবৃত্তি' নেই - অন্য শূন্য থেকে জিরো যদি কোনও লাফ দেয়। যদি অ্যাকারম্যান ফাংশনটি গণনাযোগ্য (এটি হয়), তবে নিবন্ধকার মেশিনটি এটি করতে পারে।

উত্তর:


164

হ্যা এবং না. শেষ পর্যন্ত, পুনরাবৃত্তি এমন কিছু গণনা করতে পারে না যে লুপিং করতে পারে না, তবে লুপিং আরও অনেক বেশি নদীর গভীরতানির্ণয় লাগে। অতএব, যে জিনিসগুলি পুনরাবৃত্তি করতে পারে তা লুপগুলি কিছু কার্যকে সহজ করে তোলে tasks

একটি গাছ হাঁটা নিন। পুনরাবৃত্তির সাথে একটি গাছ হাঁটা বোকামি-সহজ। এটি বিশ্বের সবচেয়ে প্রাকৃতিক জিনিস। লুপের সাথে গাছের হাঁটা অনেক সহজ সরল। আপনি যা করেছেন তার ট্র্যাক রাখতে আপনাকে একটি স্ট্যাক বা অন্য কোনও ডেটা কাঠামো বজায় রাখতে হবে।

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


120
মূলত, পুনরাবৃত্তির পরিবর্তে লুপগুলি করা মানে স্ট্যাকটি ম্যানুয়ালি হ্যান্ডেল করা।
সিলভিউ বুর্কিয়া

15
... স্ট্যাক (গুলি) । নিম্নলিখিত পরিস্থিতি একাধিক স্ট্যাক থাকা দৃ strongly়ভাবে পছন্দ করতে পারে। একটি পুনরাবৃত্ত ফাংশন বিবেচনা করুন Aযা গাছের মধ্যে কিছু খুঁজে পায়। যতক্ষণ না Aএই জিনিসটির মুখোমুখি হয়, এটি আবার একটি পুনরাবৃত্ত ফাংশন চালু করে Bযা সাবট্রিতে একটি সম্পর্কিত জিনিসটি এটি যে অবস্থানের দ্বারা চালু করা হয়েছিল সেখানে আবিষ্কার করে A। একবারে Bপুনরাবৃত্তিটি শেষ হলে এটি পুনরায় ফিরে আসে Aএবং পরেরটির নিজস্ব পুনরাবৃত্তি চালিয়ে যায়। একজন একটি স্ট্যাকের জন্য Aএবং একটির জন্য ঘোষণা করতে পারে Bবা Bস্ট্যাকটি Aলুপের ভিতরে রেখে দিতে পারে । যদি কেউ একটি স্ট্যাক ব্যবহারের জন্য জোর দেয় তবে জিনিসগুলি সত্যই জটিল হয়ে যায়।
rwong

35
Therefore, the one thing recursion can do that loops can't is make some tasks super easy. লুপগুলি যে কাজটি করতে পারে যা পুনরাবৃত্তি করতে পারে তা হ'ল কিছু কাজকে অতি সহজ করে তোলা। নিখুঁত পুনরাবৃত্তি থেকে লেজ পুনরাবৃত্তিতে সবচেয়ে প্রাকৃতিক-পুনরাবৃত্ত সমস্যাগুলি রূপান্তর করতে আপনার কী কুৎসিত, অপ্রয়োজনীয় জিনিসগুলি দেখেছেন যা তারা স্ট্যাকটি ফুঁকবে না?
ম্যাসন হুইলারের

10
@ মেসনওহিলার 99% সময় এই "জিনিসগুলি" এর মতো পুনরাবৃত্তি-অপারেটরের অভ্যন্তরে আরও ভালভাবে আবদ্ধ হতে পারে mapবা fold(বাস্তবে আপনি যদি সেগুলিকে আদিম বিবেচনা করতে চান তবে আমার মনে হয় আপনি fold/ unfoldলুপগুলি বা পুনরুত্থানের তৃতীয় বিকল্প হিসাবে ব্যবহার করতে পারেন )। আপনি যদি লাইব্রেরি কোডটি না লিখেন তবে এমন অনেকগুলি ক্ষেত্রে নেই যেখানে আপনার পুনরাবৃত্তির প্রয়োগের বিষয়ে চিন্তা করা উচিত, বরং যে কাজটি সম্পাদন করা উচিত বলে মনে করা উচিত - বাস্তবে, এর অর্থ স্পষ্ট লুপগুলি এবং সুস্পষ্ট পুনরাবৃত্তি উভয়ই সমানভাবে দুর্বল অ্যাস্ট্রাকশনগুলি যা শীর্ষ স্তরে এড়ানো উচিত।
লুশেনকো

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

78

না।

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

কোন প্রোগ্রামিং ভাষা যে বাস্তবায়ন করতে টুরিং মেশিন, বলা হয় টুরিং সম্পূর্ণ । এবং অনেকগুলি ভাষা রয়েছে যা সম্পূর্ণ টিউরিং হয়।

"যে আসলে কাজ করে?" এর নীচে আমার প্রিয় ভাষা? টিউরিং সম্পূর্ণতা FRACTRAN এর , যা টুরিং সম্পূর্ণ । এটির একটি লুপ কাঠামো রয়েছে এবং আপনি এটিতে একটি টুরিং মেশিন প্রয়োগ করতে পারেন। সুতরাং, গণনাযোগ্য যে কোনও কিছুই, এমন ভাষায় প্রয়োগ করা যেতে পারে যা পুনরাবৃত্তি না করে। অতএব, নেই কিছুই যে recursion computability পরিপ্রেক্ষিতে আপনি দিতে পারেন যে সহজ looping করতে পারেন না।

এটি সত্যিই কয়েকটি পয়েন্টে ফোটে:

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

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

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


আপনি যখন লেজ কল হিসাবে পরিচিত একটি নির্দিষ্ট ধরণের পুনরাবৃত্তিতে প্রবেশ করেন তখন এই সমতাটি বিশেষত আকর্ষণীয় হয়ে উঠতে পারে

যদি আপনার কাছে থাকে তবে বলি, একটি কল্পিত পদ্ধতি যেমন:

int fact(int n) {
    return fact(n, 1);
}

int fact(int n, int accum) {
    if(n == 0) { return 1; }
    if(n == 1) { return accum; }
    return fact(n-1, n * accum);
}

এই ধরণের পুনরাবৃত্তিটি একটি লুপ হিসাবে পুনরায় লেখা হবে - কোনও স্ট্যাক ব্যবহার করা হয়নি। সমতুল্য লুপটি লেখার চেয়ে এই জাতীয় পদ্ধতিগুলি প্রায়শই আরও মার্জিত এবং বোঝার জন্য সহজ হয় তবে আবার প্রতিটি পুনরাবৃত্ত কলের জন্য সমতুল্য লুপ লেখা যেতে পারে এবং প্রতিটি লুপের জন্য একটি পুনরাবৃত্ত কল লিখিত থাকতে পারে।

এমন অনেক সময় রয়েছে যখন সাধারণ লুপটিকে একটি লেজ কল রিকার্সিভ কলটিতে রূপান্তর করা গুলিয়ে ফেলা যায় এবং বোঝা আরও কঠিন।


আপনি যদি এর তত্ত্বের দিকে যেতে চান তবে চার্চ টিউরিং থিসিসটি দেখুন । আপনি সিএস.এসইতে গির্জা- টিউরিং -থিসিসটি দরকারী হতে পারেন।


29
টুরিং সম্পূর্ণতা প্রায় এটি প্রায় গুরুত্বপূর্ণ মত নিক্ষেপ করা হয়। অনেক কিছুই ট্যুরিং কমপ্লিট ( ম্যাজিক দ্য গ্যাথারিংয়ের মতো ), তবে এর অর্থ এই নয় যে এটি ট্যুরিং কমপ্লিটের মতো অন্য কিছুর মতো নয়। অন্তত এমন স্তরে নয় যে বিষয়টি গুরুত্বপূর্ণ। আমি ম্যাজিক দ্য গার্ডিংয়ের সাথে একটি গাছ হাঁটতে চাই না।
স্ক্যান্ট রজার

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

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

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

7
"ক্যান" খুব "বেস্ট" এর মতো জিনিস নয়। আপনি যখন "না পারার জন্য" সেরা "ভুল করেন, আপনি পক্ষাঘাতগ্রস্থ হয়ে পড়ে কারণ আপনি যেভাবেই কিছু করেন না কেন, প্রায় সবসময়ই এর থেকে আরও ভাল উপায় থাকে।
স্টিভেন বার্নাপ

31

লুপের পরিবর্তে কোনও কাজ কেবল পুনরাবৃত্তি ব্যবহার করে করা যেতে পারে এমন কোনও ঘটনা আছে কি?

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

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

এটি কি পুনরাবৃত্তি, যদি আপনি পুনরাবৃত্তি নিজেকে কল করেন, পৃথক "পুশ স্টেট" এবং "লাফ টু স্টার্ট" এবং "পপ স্টেট" পদক্ষেপ হিসাবে? এবং এর উত্তর হ'ল: না, এটি এখনও পুনরাবৃত্তি বলা হয় না, একে স্পষ্ট স্ট্যাক সহ পুনরাবৃত্তি বলা হয় (যদি আপনি প্রতিষ্ঠিত পরিভাষা ব্যবহার করতে চান)।


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

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


2
স্ট্যাকলেস প্রসেসরের জন্য অ্যাসেমব্লির সাথে কাজ করার সময়, এই দুটি কৌশল হঠাৎই এক হয়ে যায়।
জোশুয়া

@ জোশুয়া আসলেই! এটি বিমোচন স্তরের বিষয়। আপনি যদি একটি স্তর বা দুটি নীচে যান তবে এটি কেবল যুক্তির দরজা, g
হাইড

2
এটি বেশ সঠিক নয়। পুনরাবৃত্তি সহ পুনরাবৃত্তি অনুকরণ করতে, আপনার একটি স্ট্যাক প্রয়োজন যেখানে এলোমেলো অ্যাক্সেস সম্ভব। এলোমেলো অ্যাক্সেস ব্যতীত একটি একক স্ট্যাক এবং সরাসরি অ্যাক্সেসযোগ্য মেমরির একটি সীমাবদ্ধ পরিমাণ একটি পিডিএ হবে, যা টুরিং-সম্পূর্ণ নয়।
গিলস

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

20

এটি নির্ভর করে আপনি "পুনরাবৃত্তি" কতটা কঠোরভাবে সংজ্ঞায়িত করেছেন তার উপর নির্ভর করে।

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

তবে এমন কোনও ক্ষেত্রে বিবেচনা করা যাক যেখানে আমরা পুনরাবৃত্তি কল করি এবং সেই পুনরাবৃত্ত কলটির জন্য পুনরাবৃত্তির কলটির ফলাফল ব্যবহার করি।

public static BigInteger Ackermann(BigInteger m, BigInteger n)
{
  if (m == 0)
    return  n+1;
  if (n == 0)
    return Ackermann(m - 1, 1);
  else
    return Ackermann(m - 1, Ackermann(m, n - 1));
}

প্রথম পুনরাবৃত্ত কল পুনরাবৃত্তি করা সহজ:

public static BigInteger Ackermann(BigInteger m, BigInteger n)
{
restart:
  if (m == 0)
    return  n+1;
  if (n == 0)
  {
    m--;
    n = 1;
    goto restart;
  }
  else
    return Ackermann(m - 1, Ackermann(m, n - 1));
}

আমরা তখন ক্লিন-আপ অপসারণ করতে পারেন gotoতাড়ান বন্ধ velociraptors এবং Dijkstra ছায়ায়:

public static BigInteger Ackermann(BigInteger m, BigInteger n)
{
  while(m != 0)
  {
    if (n == 0)
    {
      m--;
      n = 1;
    }
    else
      return Ackermann(m - 1, Ackermann(m, n - 1));
  }
  return  n+1;
}

তবে অন্যান্য পুনরাবৃত্ত কলগুলি সরাতে আমাদের কিছু কলগুলির মান একটি স্ট্যাকের মধ্যে সংরক্ষণ করতে হবে:

public static BigInteger Ackermann(BigInteger m, BigInteger n)
{
  Stack<BigInteger> stack = new Stack<BigInteger>();
  stack.Push(m);
  while(stack.Count != 0)
  {
    m = stack.Pop();
    if(m == 0)
      n = n + 1;
    else if(n == 0)
    {
      stack.Push(m - 1);
      n = 1;
    }
    else
    {
      stack.Push(m - 1);
      stack.Push(m);
      --n;
    }
  }
  return n;
}

এখন, যখন আমরা উত্স কোডটি বিবেচনা করি, আমরা অবশ্যই আমাদের পুনরাবৃত্ত পদ্ধতিটি পুনরাবৃত্তিতে পরিণত করেছি।

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

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

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

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


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

এটি সেরা উত্তর, সম্ভবত একমাত্র সঠিক উত্তর। এমনকি দ্বিতীয় উদাহরণ এখনও রিকার্সিভ, এবং এই পর্যায়ে, মূল প্রশ্নের উত্তর হয় কোন । পুনরাবৃত্তির বিস্তৃত সংজ্ঞা সহ একারম্যান ফাংশনের জন্য পুনরাবৃত্তি এড়ানো অসম্ভব।
অঙ্কিত

@gerrit এবং একটি সংকীর্ণ সহ, এটি এড়াতে পারে না। শেষ পর্যন্ত এটি আমরা যা করি বা কার্যকর কোডটি নির্দিষ্ট কোডের জন্য ব্যবহার করি না সেটিকে প্রয়োগ করি না ঠিক তার প্রান্তে নেমে আসে।
জন হান্না

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

9

শাস্ত্রীয় উত্তরটি "না", তবে কেন আমাকে "হ্যাঁ" আরও ভাল উত্তর বলে মনে হয় তা বিশদ দেওয়ার জন্য আমাকে অনুমতি দিন।


এগিয়ে যাওয়ার আগে আসুন কিছু উপায় বের করা যাক: একটি গণনীয়তা এবং জটিলতার দিক থেকে:

  • লুপিংয়ের সময় আপনাকে যদি সহায়তার স্ট্যাক রাখার অনুমতি দেওয়া হয় তবে উত্তরটি "না" "
  • লুপিংয়ের সময় আপনার যদি অতিরিক্ত কোনও ডেটা অনুমতি না দেওয়া হয় তবে উত্তরটি হ্যাঁ "হ্যাঁ"।

ঠিক আছে, এখন, একটি পা অনুশীলন-স্থলে রাখি, অন্য পা তত্ত্ব-স্থলে রাখি।


কল স্ট্যাক একটি নিয়ন্ত্রণ কাঠামো, যেখানে ম্যানুয়াল স্ট্যাক একটি ডেটা স্ট্রাকচার। নিয়ন্ত্রণ ও তথ্য আছে না সমান ধারণা কিন্তু তারা সমতুল্য অর্থে যে, তারা যাবে কমে একটি computability বা জটিলতা দৃষ্টিকোণ থেকে (পরস্পর মাধ্যমে অথবা "emulated") একে অপরের সাথে।

এই পার্থক্য কখন হতে পারে? আপনি যখন বাস্তব-বিশ্বের সরঞ্জামগুলির সাথে কাজ করছেন। এখানে একটি উদাহরণ:

বলুন আপনি এন-ওয়ে বাস্তবায়ন করছেন mergesort। আপনার কাছে এমন একটি forলুপ থাকতে পারে যা প্রতিটি Nবিভাগের মধ্য দিয়ে যায় , mergesortতাদের আলাদাভাবে কল করে, তারপরে ফলাফলগুলি মার্জ করে।

কীভাবে আপনি ওপেনএমপি-এর সাথে সমান্তরাল করতে পারেন?

পুনরাবৃত্তির রাজ্যে এটি অত্যন্ত সহজ: #pragma omp parallel forআপনার লুপটি 1 থেকে N এ যেতে হবে এবং আপনার কাজ শেষ হয়েছে। পুনরাবৃত্ত অঞ্চলে আপনি এটি করতে পারবেন না। আপনাকে নিজেই থ্রেড স্প্যান করতে হবে এবং যথাযথ ডেটা ম্যানুয়ালি তাদের হাতে দিতে হবে যাতে তারা কী করতে পারে তা জানে know

অন্যদিকে, অন্যান্য সরঞ্জাম রয়েছে (যেমন স্বয়ংক্রিয় ভেক্টরাইজারগুলি, যেমন #pragma vector) লুপগুলি নিয়ে কাজ করে তবে পুনরাবৃত্তি করে একেবারে অকেজো।

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

অর্থাত্: একটি দৃষ্টান্তের জন্য সরঞ্জামগুলি স্বয়ংক্রিয়ভাবে অন্যান্য দৃষ্টান্তগুলিতে অনুবাদ করে না।

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


এমনকি এর বাইরেও, বিবেচনা করুন যে পুশ-ডাউন অটোমেটনের মাধ্যমে সমস্যার সমাধান করা যায় সেই সেটটির চেয়ে বড় এটি একটি সীমাবদ্ধ অটোমেটনের সাথে সমাধান করা যেতে পারে (নির্ধারক বা না হোক) তবে সেটটির চেয়ে ছোট যা সমাধান করা যেতে পারে টুরিং মেশিন।
সুপারক্যাট

8

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

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

সংক্ষেপ:

  • পুনরাবৃত্তি মামলা = নিয়ন্ত্রণ প্রবাহ + স্ট্যাক (+ হিপ)
  • লুপ কেস = নিয়ন্ত্রণ প্রবাহ + হিপ

ধরে নিই যে নিয়ন্ত্রণ প্রবাহ অংশটি যুক্তিসঙ্গতভাবে শক্তিশালী, কেবলমাত্র উপলব্ধ পার্থক্য মেমরির ধরণের। সুতরাং, আমরা 4 টি কেস নিয়ে রয়েছি (এক্সপ্রেটিভনেস শক্তি বন্ধনীতে তালিকাভুক্ত করা হয়েছে):

  1. কোনও স্ট্যাক নেই, কোনও গাদা নেই: পুনরাবৃত্তি এবং গতিশীল কাঠামো অসম্ভব। (পুনরাবৃত্তি = লুপ)
  2. স্ট্যাক, কোনও গাদা: পুনরাবৃত্তি ঠিক আছে, গতিশীল কাঠামো অসম্ভব। (পুনরাবৃত্তি> লুপ)
  3. কোনও স্ট্যাক নেই, গাদা: পুনরাবৃত্তি অসম্ভব, গতিশীল কাঠামো ঠিক আছে। (পুনরাবৃত্তি = লুপ)
  4. স্ট্যাক, গাদা: পুনরাবৃত্তি এবং গতিশীল কাঠামো ঠিক আছে। (পুনরাবৃত্তি = লুপ)

গেমের নিয়মগুলি যদি কিছুটা কঠোর হয় এবং পুনরুক্তি প্রয়োগকারী লুপগুলি ব্যবহার করতে নিষিদ্ধ করা হয় তবে আমরা এর পরিবর্তে এটি পাই:

  1. কোনও স্ট্যাক নেই, কোনও গাদা নেই: পুনরাবৃত্তি এবং গতিশীল কাঠামো অসম্ভব। (পুনরাবৃত্তি <লুপ)
  2. স্ট্যাক, কোনও গাদা: পুনরাবৃত্তি ঠিক আছে, গতিশীল কাঠামো অসম্ভব। (পুনরাবৃত্তি> লুপ)
  3. কোনও স্ট্যাক নেই, গাদা: পুনরাবৃত্তি অসম্ভব, গতিশীল কাঠামো ঠিক আছে। (পুনরাবৃত্তি <লুপ)
  4. স্ট্যাক, গাদা: পুনরাবৃত্তি এবং গতিশীল কাঠামো ঠিক আছে। (পুনরাবৃত্তি = লুপ)

পূর্ববর্তী দৃশ্যের মূল পার্থক্য হ'ল স্ট্যাক মেমরির অভাবে কোডের লাইনগুলি চেয়ে কার্যকর করার সময় লুপগুলি ছাড়াই পুনরাবৃত্তি করতে দেয় না।


2

হ্যাঁ. কয়েকটি সাধারণ কাজ রয়েছে যা পুনরাবৃত্তি ব্যবহার করে সম্পাদন করা সহজ তবে কেবল লুপগুলি দিয়ে অসম্ভব:

  • স্ট্যাকের ওভারফ্লোগুলি ঘটায়।
  • পুরোপুরি বিভ্রান্তিকর প্রোগ্রামার প্রোগ্রামারদের।
  • প্রকৃতপক্ষে ও (দ্রুতগামী) ফাংশন তৈরি করছে O

3
দয়া করে, লুপগুলি সহ এগুলি সত্যই সহজ, আমি এগুলি সর্বদা দেখি। হেক, কিছুটা চেষ্টা করেও আপনাকে লুপের দরকার নেই। এমনকি পুনরাবৃত্তি সহজ।
এভিডি

1
আসলে, এ (0, এন) = এন + 1; এ (মি, 0) = এ (মি -1,1) যদি এম> 0; এ (এম, এন) = এ (মি -1, এ (মি, এন -1)) যদি এম> 0, এন> 0 ও (এন ^ এন) (এম = এন) এর চেয়ে কিছুটা গতি বাড়িয়ে তোলে :)
জন ডন

1
@ জনডন কিছুটা বেশি, এটি সুপার এক্সপশনিয়াল। n = 3 n for n ^ n এর জন্য n = 4 n ^ n ^ n ^ n ^ n এর জন্য। n to n পাওয়ার n বার।
অ্যারন ম্যাকমিলিন

1

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

আদিম পুনরাবৃত্ত ফাংশন পুনরাবৃত্ত ফাংশনগুলির তুলনায় কঠোরভাবে কম শক্তিশালী। আপনি পুনরাবৃত্তি ব্যবহার করে এমন ফাংশনগুলি গ্রহণ করলে আপনি একই ফলাফল পাবেন যেখানে পুনরাবৃত্তির সর্বোচ্চ গভীরতা আগেই গণনা করতে হবে।


3
আমি নিশ্চিত না যে এটি উপরের প্রশ্নে কীভাবে প্রযোজ্য? আপনি কি দয়া করে এই সংযোগটি আরও স্পষ্ট করে তুলতে পারেন?
ইয়াক

1
"সীমাবদ্ধ পুনরাবৃত্তির গণনা সহ লুপ" এবং "সীমাহীন পুনরাবৃত্তির গণনা সহ লুপ" এর মধ্যে গুরুত্বপূর্ণ পার্থক্যের সাথে অনর্থক "লুপ" প্রতিস্থাপন, যা আমি ভেবেছিলাম সিএস 101 থেকে প্রত্যেকেই জানতে পারবেন।
gnasher729

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

1

আপনি যদি সি ++ তে প্রোগ্রামিং করে থাকেন এবং সি ++ 11 ব্যবহার করেন, তবে পুনরাবৃত্তিগুলি ব্যবহার করে একটি জিনিস করতে হবে: কনটেক্সটপ্রাপ্ত ফাংশন। কিন্তু 512 থেকে মান সীমা এই, ব্যাখ্যা যেমন এই উত্তর । এই ক্ষেত্রে লুপগুলি ব্যবহার করা সম্ভব নয়, যেহেতু সেই ক্ষেত্রে ফাংশনটি কনটেক্সপ্রেস করা যায় না, তবে এটি সি ++ 14 এ পরিবর্তিত হয়।


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

ট্রি ওয়াকিংয়ের একাধিক পুনরাবৃত্ত কল রয়েছে (প্রতিটি সন্তানের জন্য একটি), তবু এটি স্বচ্ছ স্ট্যাক ব্যবহার করে তুচ্ছভাবে লুপে রূপান্তরিত হয়। অন্যদিকে পার্সারগুলি রূপান্তর করতে প্রায়ই বিরক্ত হয়।
কোডসইনচাউস

@ কোডসআইএনচাউস সম্পাদিত।
গুলশান

-6

আমি অন্যান্য প্রশ্নের সাথে একমত। লুপ দিয়ে আপনি করতে পারবেন না এমন পুনরাবৃত্তি করতে পারে এমন কিছুই নেই।

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


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

6
আপনি যদি কেবল লুপের পরিবর্তনশীল বৃদ্ধি করতে ভুলে যান তবে লুপটি "খুব বিপজ্জনক" হতে পারে ...
এইচ

2
সুতরাং, প্রকৃতপক্ষে, ইচ্ছাকৃতভাবে স্ট্যাকের ওভারফ্লো উত্পাদন করা একটি কাজ যা পুনরাবৃত্তি না ব্যবহার করে খুব জটিল হয়ে ওঠে।
5gon12eder

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

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