ফ্যাটোরিয়াল, ফিবোনাকির সংখ্যাগুলি ছাড়া পুনরাবৃত্তি


47

পুনরাবৃত্তির সম্পর্কে আমি প্রায় প্রতিটি নিবন্ধে ফ্যাক্টরিয়াল বা ফিবোনাচি নাম্বারগুলির উদাহরণ অন্তর্ভুক্ত করে যা:

  1. ম্যাথ
  2. বাস্তব জীবনে অকেজো

পুনরাবৃত্তি শেখানোর জন্য কিছু আকর্ষণীয় অ-গণিত কোড উদাহরণ রয়েছে?

আমি বিভাজন এবং বিজয়ী অ্যালগরিদমগুলি ভাবছি তবে তারা সাধারণত জটিল ডেটা কাঠামোতে জড়িত।


26
আপনার প্রশ্নটি সম্পূর্ণরূপে বৈধ হওয়ার পরেও, আমি ফিজোনাচি নম্বরগুলি বাস্তব জীবনে অকেজো বলে কল করতে দ্বিধা করব । একই জন্য যায় গৌণিক
জাচ এল

2
লিটল স্কিমার পুনরাবৃত্তি সম্পর্কিত একটি সম্পূর্ণ বই যা কখনই ফ্যাক্ট বা ফিব ব্যবহার করে না। জুনিক্স- লিনাক্স- কনফিগ.googlecode.com/files/…
এরিক উইলসন

5
@ জাচ: তবুও, ঘন ঘন চলমান সময়টির কারণে পুনরাবৃত্তি ফিবোনাচি সংখ্যাগুলি বাস্তবায়নের জন্য একটি ভয়ঙ্কর উপায় ।
dan04

2
@ ডান04: বেশিরভাগ লানাগাজে স্ট্যাক ওভারফ্লো হওয়ার সম্ভাবনার কারণে পুনরুক্তি প্রায় কোনও কিছু বাস্তবায়নের একটি ভয়ঙ্কর উপায়।
আর ..

5
@ ডান04 যদি না আপনার ভাষা বেশিরভাগ কার্যকরী ভাষার মতো টেল কল অপ্টিমাইজেশন প্রয়োগ করতে যথেষ্ট স্মার্ট না হয় তবে এটি ঠিক আছে
জাচারি কে

উত্তর:


107

ডিরেক্টরি / ফাইল স্ট্রাকচারগুলি পুনরাবৃত্তির জন্য ব্যবহারের সর্বোত্তম উদাহরণ, কারণ আপনি শুরু করার আগে প্রত্যেকে সেগুলি বোঝে, তবে গাছের মতো কাঠামোগত জড়িত যে কোনও কিছুই করবে।

void GetAllFilePaths(Directory dir, List<string> paths)
{
    foreach(File file in dir.Files)
    {
        paths.Add(file.Path);
    }

    foreach(Directory subdir in dir.Directories)
    {
        GetAllFilePaths(subdir, paths)
    }
}

List<string> GetAllFilePaths(Directory dir)
{
    List<string> paths = new List<string>();
    GetAllFilePaths(dir, paths);
    return paths;
}

1
ধন্যবাদ, আমি মনে করি আমি ফাইল সিস্টেম নিয়ে যাব। এটি কংক্রিটের কিছু এবং বাস্তবের বিশ্বের অনেক উদাহরণের জন্য এটি ব্যবহার করা যেতে পারে।
প্রান্তসন্নিকর্ষ

9
দ্রষ্টব্য: ইউনিক্স কমান্ড প্রায়শই -r বিকল্পটি অন্তর্ভুক্ত করে (উদাহরণের জন্য সিপি বা আরএম)। - পুনরাবৃত্তি জন্য দাঁড়ানো।
ডেডালনিক্স

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

1
@ জে কে: ডিরেক্টরিগুলিকে শক্তভাবে লিঙ্ক করা যায় না, সুতরাং কয়েকটি পাতাগুলি একাধিক স্থানে প্রদর্শিত হতে পারে এবং আপনাকে সিমিলিকগুলি বাদ দিয়ে ধরে নিচ্ছে, আসল ওয়ার্ল্ড ফাইল সিস্টেমগুলি গাছ।
আর ..

1
ডিরেক্টরিগুলির জন্য কিছু ফাইল সিস্টেমে অন্যান্য বিশেষত্ব রয়েছে যেমন এনটিএফএস পুনর্বার পয়েন্ট। আমার বক্তব্যটি হ'ল কোডটি যা এটি সম্পর্কে বিশেষভাবে অবগত নয়
সেগুলির

51

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

চিন্তা করার বিষয়গুলি:

  • ফাইল সিস্টেম - এগুলি মূলত গাছ; একটি দুর্দান্ত প্রোগ্রামিংয়ের কাজ হ'ল একটি নির্দিষ্ট ডিরেক্টরি এবং এর সমস্ত উপ-ডিরেক্টরিতে সমস্ত .jpg চিত্র আনতে হবে
  • পূর্বসূরি - একটি পরিবার গাছ দেওয়া হয়েছে, একটি সাধারণ পূর্বপুরুষের সন্ধানের জন্য আপনাকে চলতে হবে এমন কতগুলি প্রজন্মের সন্ধান করুন; বা গাছের দুটি ব্যক্তি একই প্রজন্মের কিনা তা পরীক্ষা করুন; বা গাছের দুটি ব্যক্তি আইনত বিবাহ করতে পারবেন কিনা তা পরীক্ষা করুন (এখতিয়ারের উপর নির্ভর করে :)
  • এইচটিএমএল-এর মতো নথি - একটি নথি এবং একটি ডিওএম গাছের ক্রমিক (পাঠ্য) উপস্থাপনের মধ্যে রূপান্তর; কোনও ডিওএমের সাবসেটগুলিতে ক্রিয়াকলাপ সম্পাদন করুন (সম্ভবত xpath এর উপসেটটি প্রয়োগ করবেন?); ...

এগুলি সমস্ত বাস্তব-বাস্তব-পরিস্থিতি সম্পর্কিত এবং এগুলি সমস্তই বাস্তব-বিশ্বের তাত্পর্য হিসাবে ব্যবহৃত হতে পারে।


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

1
পয়েন্টারগুলির এটির সাথে কী করতে হবে? এমনকি আপনার প্রথম সন্তানের, পরবর্তী ভাইবোন এবং পিতামাতার দিকে ইঙ্গিত করার পরেও আপনাকে এখনও কোনওভাবে আপনার গাছের মধ্য দিয়ে চলতে হবে এবং কিছু ক্ষেত্রে, পুনরাবৃত্তি সবচেয়ে সম্ভাব্য উপায় way
টিডামার্স

40

https://stackoverflow.com/questions/105838/real-world-examples-of-recursion

  • একটি সংক্রামক সংক্রমণের মডেলিং
  • জ্যামিতি উত্পাদন
  • ডিরেক্টরি পরিচালনা
  • শ্রেণীবিভাজন

https://stackoverflow.com/questions/2085834/how-did-you-practically-use-recursion

  • raytracing
  • দাবা
  • উত্স কোড পার্সিং (ভাষা ব্যাকরণ)

https://stackoverflow.com/questions/4945128/what-is-a-good-example-of-recursion-other-than-generating-a-fibonacci-sequence

  • বিএসটি অনুসন্ধান
  • হ্যানয়ের টাওয়ার
  • প্যালিনড্রোম অনুসন্ধান

https://stackoverflow.com/questions/126756/examples-of-recursive-functions

  • একটি দুর্দান্ত ইংরেজী ভাষার গল্প দেয় যা শয়নকালীন গল্পের দ্বারা পুনরাবৃত্তি চিত্রিত করে।

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

@ আন্না ওয়েল, ব্যবহারকারীরা তাদের প্রশ্নগুলি মুছে ফেলতে পারবেন না এমনটা হওয়ার সম্ভাবনা কতটা?
vemv

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

@ আন্না: এই ভাবনার ধারা অনুসরণ করে, "যথাযথ সদৃশ" হিসাবে বন্ধ হওয়া প্রতিটি প্রশ্নের উত্তর আটকে থাকা আসলটির উত্তর হওয়া উচিত This এই প্রশ্নটি হুবহু সদৃশ (এসও সম্পর্কিত প্রশ্নগুলির), কেন এটি সঠিক থেকে আলাদা চিকিত্সা গ্রহণ করা উচিত? প্রোগ্রামারগুলিতে প্রশ্নের নকল?
এসএফ

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

22

এখানে আরো কিছু ব্যবহারিক সমস্যা যা আমার মনে আসে:

  • বাছাই বাছাই করুন
  • বাইনারি অনুসন্ধান
  • গাছগুলিতে ট্র্যাভারসাল, সন্নিবেশ এবং অপসারণ (মূলত ডাটাবেস অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়)
  • আউটপুটেশন জেনারেটর
  • সুডোকু সলভার (ব্যাকট্র্যাকিং সহ)
  • বানান-পরীক্ষা (আবার ব্যাকট্র্যাকিং সহ)
  • সিনট্যাক্স বিশ্লেষণ (.eg, একটি প্রোগ্রাম যা উপসর্গটিকে পোস্টফিক্স স্বরলিপিতে রূপান্তর করে)

11

কুইকসোর্ট মনে হ'ল প্রথমটি। বাইনারি অনুসন্ধানও একটি পুনরাবৃত্ত সমস্যা। এর বাইরেও সমস্যাগুলির পুরো ক্লাস রয়েছে যা আপনি পুনরাবৃত্তি নিয়ে কাজ শুরু করার সময় সমাধানগুলি প্রায় ফ্রি হয়ে যায়।


3
বাইনারি অনুসন্ধান প্রায়শই একটি পুনরাবৃত্ত সমস্যা হিসাবে তৈরি করা হয় তবে এটি একটি অপরিহার্য উপায়ে প্রয়োগ করা তুচ্ছ (এবং প্রায়শই পছন্দনীয়)।
ফ্লফি

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

2
@ জাচারি: লেজ পুনরাবৃত্তি (বাইনারি অনুসন্ধানের মতো) এর সাথে প্রয়োগ করা যেতে পারে এমন অ্যালগরিদমগুলি সত্যিকারের পুনরাবৃত্তি (বা সমান ব্যয়বহুল স্থানের প্রয়োজনীয়তার সাথে আপনার নিজস্ব রাষ্ট্রীয় কাঠামো) এর চেয়ে মৌলিকভাবে পৃথক স্থান শ্রেণিতে থাকে। আমি মনে করি না যে তাদের একসাথে পড়া শেখানো তাদের পক্ষে উপকারী if
আর ..

8

বাছাই করুন, পাইথনে পুনরাবৃত্তভাবে সংজ্ঞায়িত।

def sort( a ):
    if len(a) == 1: return a
    part1= sort( a[:len(a)//2] )
    part2= sort( a[len(a)//2:] )
    return merge( part1, part2 )

মার্জ করুন, পুনরাবৃত্তি সংজ্ঞায়িত।

def merge( a, b ):
    if len(b) == 0: return a
    if len(a) == 0: return b
    if a[0] < b[0]:
        return [ a[0] ] + merge(a[1:], b)
    else:
        return [ b[0] ] + merge(a, b[1:]) 

রৈখিক অনুসন্ধান, পুনরাবৃত্তি সংজ্ঞায়িত।

def find( element, sequence ):
    if len(sequence) == 0: return False
    if element == sequence[0]: return True
    return find( element, sequence[1:] )

বাইনারি অনুসন্ধান, পুনরাবৃত্তি সংজ্ঞায়িত।

def binsearch( element, sequence ):
    if len(sequence) == 0: return False
    mid = len(sequence)//2
    if element < mid: 
        return binsearch( element, sequence[:mid] )
    else:
        return binsearch( element, sequence[mid:] )

6

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

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

সমস্যা সমাধানের জন্য এটি ব্যাকট্র্যাকিং ব্যবহারের উদাহরণ।

অন্যান্য সমস্যা হ'ল কৃত্রিম বুদ্ধিমত্তার ডোমেনের ক্লাসিক: ডিপথ ফার্স্ট সার্চ, প্যাথফাইন্ডিং, পরিকল্পনা ব্যবহার।

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

0 = খালি তালিকা 1 = একটি নোডের সাথে তালিকা। 2 = 2 নোড সহ তালিকা। ...

তারপরে এই ডেটা কাঠামোর ক্ষেত্রে দুটি সংখ্যার যোগফল নির্ধারণ করুন: খালি + এন = এন নোড (এক্স) + এন = নোড (এক্স + এন)


5

হ্যানয়ের টাওয়ারগুলি পুনরাবৃত্তি শিখতে সহায়তা করার জন্য একটি ভাল।

ওয়েবে বিভিন্ন বিভিন্ন ভাষায় এর অনেকগুলি সমাধান রয়েছে।


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

5

একটি প্যালিনড্রোম সনাক্তকারী:

একটি স্ট্রিং দিয়ে শুরু করুন: "এবিসিডিইডিসিবিএ" শুরু এবং শেষ অক্ষরগুলি সমান হলে, পুনরাবৃত্তি করুন এবং "বিসিডিইইডিসিবি" ইত্যাদি পরীক্ষা করুন ...


6
এটি পুনরাবৃত্তি ছাড়াই সমাধান করাও তুচ্ছ এবং আইএমএইচও, এটি ছাড়া আরও ভাল সমাধান করা।
blrfl

3
সম্মত, কিন্তু ওপি বিশেষত ডেটা স্ট্রাকচারের ন্যূনতম ব্যবহারের সাথে শিক্ষণ উদাহরণগুলির জন্য অনুরোধ করেছিল।
এনডাব্লুএস

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


4

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

এফ # একটি অপরিষ্কার কার্যকরী ভাষা যা উভয় শৈলীর অনুমতি দেয় তাই আমি উভয়কে এখানে তুলনা করব। নিম্নলিখিত তালিকার সমস্ত সংখ্যার যোগফল।

মিউটেবল ভেরিয়েবল সহ ইমপিরিটিভ লুপ

let xlist = [1;2;3;4;5;6;7;8;9;10]
let mutable sum = 0
for x in xlist do
    sum <- sum + x

কোনও মিউটেবল স্টেট সহ পুনরাবৃত্তীয় লুপ

let xlist = [1;2;3;4;5;6;7;8;9;10]
let rec loop sum xlist = 
    match xlist with
    | [] -> sum
    | x::xlist -> loop (sum + x) xlist
let sum = loop 0 xlist

লক্ষ্য করুন অ্যাগ্রিগেশন এই ধরনের হয় উচ্চতর ক্রম ফাংশন বন্দী List.foldএবং হিসেবে লেখা যেতে পারে List.fold (+) 0 xlistবা প্রকৃতপক্ষে আরও বেশি কেবল সুবিধার ফাংশন List.sumঠিক যেমন List.sum xlist


আপনি আমার কাছ থেকে মাত্র +1 চেয়ে বেশি পয়েন্ট প্রাপ্য হবে। পুনরাবৃত্তি ছাড়াই এফ # খুব ক্লান্তিকর হবে, এটি হাস্কেলের পক্ষে আরও সত্য যে কেবলমাত্র পুনরাবৃত্তির কোনও লুপিং কনস্ট্রাক্ট নেই!
schoetbi

3

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

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

আপনি এই ধরণের প্রোগ্রামের একটি খুব বেসিক রূপরেখা দেখতে পারেন, https://secure.wikimedia.org/wikedia/en/wiki/Minimax#Pseudocode দেখুন


3

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

এখন বিওএম সম্পর্কে কোনও সামগ্রিক তথ্য জানতে বা কোনও বিওএম-তে উপাদান পরিবর্তন করার জন্য আপনি প্রায়শই পুনরাবৃত্তি করেন।

    class BomPart
    {
        public string PartNumber { get; set; }
        public string Desription { get; set; }
        public int Quantity { get; set; }
        public bool Plastic { get; set; }
        public List<BomPart> Components = new List<BomPart>();
    }

এবং একটি নমুনা পুনরাবৃত্তি কল ...

    static int ComponentCount(BomPart part)
    {
        int subCount = 0;
        foreach(BomPart p in part.Components)
            subCount += ComponentCount(p);
        return part.Quantity * Math.Max(1,subCount);

    }

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


উপকরণগুলির একটি বিল নির্দেশিত গ্রাথের পরিবর্তে একটি গাছ হতে পারে, উদাহরণস্বরূপ একই স্ক্রু স্ক্রু আরও একটি উপাদান ব্যবহার করতে পারেন।
ইয়ান

-1

পারিবারিক সম্পর্কগুলি ভাল উদাহরণ তৈরি করে কারণ প্রত্যেকে এগুলি স্বজ্ঞাতভাবে বোঝে:

ancestor(joe, me) = (joe == me) 
                    OR ancestor(joe, me.father) 
                    OR ancestor(joe, me.mother);

এই কোডটি কোন ভাষায় লেখা আছে?
törzsmókus

@ törzsmókus কোনও নির্দিষ্ট ভাষা নেই। বাক্য গঠনটি সি, ওবজ-সি, সি ++, জাভা এবং অন্যান্য অনেক ভাষার খুব কাছাকাছি, তবে আপনি যদি সত্যিকারের কোড চান তবে আপনার ||জন্য উপযুক্ত অপারেটরের বিকল্প প্রয়োজন হতে পারে OR
কালেব

-1

অভ্যর্থনা অভ্যন্তরীণ কাজ ভাল পুনর্বার অকার্যকর এখনও পুনরাবৃত্তি strlen():

size_t strlen( const char* str )
{
    if( *str == 0 ) {
       return 0;
    }
    return 1 + strlen( str + 1 );
}

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


-2

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


2
প্রথাগত অর্থে পুনরাবৃত্তির বিপরীতে এটি সাধারণত একটি প্রক্রিয়া সারিতে আরও ভাল পরিবেশিত হয়।
ফ্লফি

-2

আমি একটি পুনরাবৃত্তির প্রোগ্রামটি ব্যবহার করে একটি নাইট প্যাটার্ন (দাবাবোর্ডে) দিয়ে সমস্যার সমাধান করেছি। আপনার কাছে নাইটটি প্রায় সরানোর কথা ছিল যাতে এটি কয়েকটি চিহ্নিত স্কোয়ার বাদে প্রতিটি স্কয়ারকে স্পর্শ করে।

আপনি কেবল:

mark your "Current" square
gather a list of free squares that are valid moves
are there no valid moves?
    are all squares marked?
        you win!
for each free square
    recurse!
clear the mark on your current square.
return.    

অনেক ধরণের "থিঙ্ক-ফরোয়ার্ড" পরিস্থিতি এর মতো গাছের মধ্যে ভবিষ্যতের সম্ভাবনাগুলি পরীক্ষা করে কাজ করা যেতে পারে।

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