কখনও কখনও প্রোগ্রামিং যখন পুনরাবৃত্তি হয়, আপনি একই পরামিতিগুলির সাথে একাধিকবার ফাংশনটি কল করেন যা অনিবার্য।
বিখ্যাত উদাহরণস্বরূপ ফিবোনাচি সংখ্যা:
index: 1,2,3,4,5,6...
Fibonacci number: 1,1,2,3,5,8...
function F(n) {
if (n < 3)
return 1
else
return F(n-1) + F(n-2)
}
চলুন এফ (5) চালান:
F(5) = F(4) + F(3)
= {F(3)+F(2)} + {F(2)+F(1)}
= {[F(2)+F(1)]+1} + {1+1}
= 1+1+1+1+1
সুতরাং আমরা কল করেছি: 1 বার F (4) 2 বার F (3) 3 বার F (2) 2 বার F (1)
ডায়নামিক প্রোগ্রামিং পদ্ধতির: আপনি যদি একই প্যারামিটারের সাথে কোনও ফাংশনটিকে একাধিকবার কল করেন, ফলাফলটি পরের বারে সরাসরি অ্যাক্সেসের জন্য পরিবর্তনকে সংরক্ষণ করুন। পুনরাবৃত্তি পদ্ধতি:
if (n==1 || n==2)
return 1
else
f1=1, f2=1
for i=3 to n
f = f1 + f2
f1 = f2
f2 = f
আসুন আবার এফ (5) কল করুন:
fibo1 = 1
fibo2 = 1
fibo3 = (fibo1 + fibo2) = 1 + 1 = 2
fibo4 = (fibo2 + fibo3) = 1 + 2 = 3
fibo5 = (fibo3 + fibo4) = 2 + 3 = 5
যেমন আপনি দেখতে পাচ্ছেন, যখনই আপনার একাধিক কল প্রয়োজন তখন কেবল পুনরায় গণনার পরিবর্তে মান পেতে আপনি কেবল সংশ্লিষ্ট ভেরিয়েবলটি অ্যাক্সেস করুন।
যাইহোক, ডায়নামিক প্রোগ্রামিং এর অর্থ একটি পুনরাবৃত্ত কোডটি একটি পুনরাবৃত্ত কোডে রূপান্তর করা নয়। আপনি যদি পুনরাবৃত্তির কোড চান তবে আপনি সাবসার্টসগুলিকে একটি চলকতেও সংরক্ষণ করতে পারেন। এক্ষেত্রে কৌশলটিকে মেমোয়েজেশন বলা হয়। আমাদের উদাহরণের জন্য এটি দেখতে এটির মতো দেখাচ্ছে:
// declare and initialize a dictionary
var dict = new Dictionary<int,int>();
for i=1 to n
dict[i] = -1
function F(n) {
if (n < 3)
return 1
else
{
if (dict[n] == -1)
dict[n] = F(n-1) + F(n-2)
return dict[n]
}
}
সুতরাং ডিভাইড এবং কনকয়ের সাথে সম্পর্ক হ'ল ডি অ্যান্ড ডি অ্যালগরিদমগুলি পুনরাবৃত্তির উপর নির্ভর করে। এবং তাদের কিছু সংস্করণে এই একই প্যারামিটার সমস্যাটির সাথে একাধিক ফাংশন কল রয়েছে। "ম্যাট্রিক্স শৃঙ্খলা গুণ" এবং "দীর্ঘতম সাধারণ অনুচ্ছেদ" অনুসন্ধান করুন যেমন ডি ও ডি আলগোতে টি (এন) উন্নত করার জন্য ডিপি প্রয়োজন।