حول مثال المعادلة O(k^n)
في المثال التالي، هل المقصود بالكود return fibonacci(n-1) + fibonacci(n-2)
هو جمع القيمة الموجودة في الباراميترات مثل مبدأ فايبوناتشي (Fibonacci).
أو استخدمته فقط + لكي تضيف دالة جنب دالة حتى يتم إرجاعها مرتين؟
// تعريف الدالة لا يحسب كخطوة
public int fibonacci(int n)
{
// الشرط بحد ذاته لا يحسب خطوة
if (n <= 0)
{
// كما قلنا سابقاً Big-O إرجاع القيمة يحسب خطوة واحدة و لكن عدد الخطوات غير مهم في تقييم الـ
return 0;
}
// الشرط بحد ذاته لا يحسب خطوة
if (n <= 2)
{
// كما قلنا سابقاً Big-O إرجاع القيمة يحسب خطوة واحدة و لكن عدد الخطوات غير مهم في تقييم الـ
return 1;
}
// كخطوتين return لنفسها ) سيتم حساب أمر الـ return كل مرة سيتم فيها إعادة استدعاء الدالة لنفسها, ( أي ستفعل
// n و السبب في ذلك أن كل عملية جمع سيتم إرجاعها تتطلب من الدالة أن تستدعي نفسها مرتين مضاعفة بقيمة
// O(k^n) بما أن الدالة ستعيد استدعاء نفسها كل مرة بمقدار ضعفين زيادة فإنه سيتم تمثيلها بـ
return fibonacci(n - 1) + fibonacci(n - 2);
}
// تعريف الدالة لا يحسب كخطوة
public int fibonacci(int n)
{
// الشرط بحد ذاته لا يحسب خطوة
if (n <= 0)
{
// كما قلنا سابقاً Big-O إرجاع القيمة يحسب خطوة واحدة و لكن عدد الخطوات غير مهم في تقييم الـ
return 0;
}
// الشرط بحد ذاته لا يحسب خطوة
if (n <= 2)
{
// كما قلنا سابقاً Big-O إرجاع القيمة يحسب خطوة واحدة و لكن عدد الخطوات غير مهم في تقييم الـ
return 1;
}
// كخطوتين return لنفسها ) سيتم حساب أمر الـ return كل مرة سيتم فيها إعادة استدعاء الدالة لنفسها, ( أي ستفعل
// n و السبب في ذلك أن كل عملية جمع سيتم إرجاعها تتطلب من الدالة أن تستدعي نفسها مرتين مضاعفة بقيمة
// O(k^n) بما أن الدالة ستعيد استدعاء نفسها كل مرة بمقدار ضعفين زيادة فإنه سيتم تمثيلها بـ
return fibonacci(n - 1) + fibonacci(n - 2);
}