مثال بازنویسی کد
این مثال نشان میدهد که چگونه با استفاده از DeepSeek میتوان کد را تحلیل و بهینهسازی کرد، شامل مدیریت خطا، توضیحات و بهبود عملکرد.
وظیفه
کد زیر را که ناکارآمد است و موارد حدی را مدیریت نمیکند، تحلیل و بهینهسازی کنید:
def fib(n):
    if n <= 2:
        return n
    return fib(n-1) + fib(n-2)پرامپت
کد بالا ناکارآمد است و موارد حدی را مدیریت نمیکند. لطفاً مشکلات و راهحلها را توضیح دهید و کد را بهینهسازی کنید.
پاسخ
تحلیل مشکل
این پیادهسازی تابع فیبوناچی fib(n) از بازگشت استفاده میکند. کد ساده است اما مشکلات زیر را دارد:
- 
محاسبات تکراری: فراخوانیهای بازگشتی منجر به محاسبات مکرر میشود. به عنوان مثال، هنگام محاسبه
fib(5)، مقادیرfib(3)وfib(2)چندین بار محاسبه میشوند که کارایی را کاهش میدهد. - 
مدیریت ناکافی موارد حدی: در حالی که مورد
n <= 2مدیریت میشود، موردn < 0در نظر گرفته نمیشود. تابع برای ورودیهای منفی نتایج نادرست برمیگرداند. - 
محدودیت عمق بازگشت: برای مقادیر بزرگ
n، عمق بازگشت میتواند از محدودیت استاندارد پایتون فراتر رفته و باعثRecursionErrorشود. 
راهحلها
- 
استفاده از حافظهسازی: ذخیره اعداد فیبوناچی محاسبه شده در حافظه نهان برای جلوگیری از محاسبات تکراری و بهبود کارایی.
 - 
مدیریت موارد حدی: افزودن بررسی برای
n < 0و برگرداندن پیام خطا یا مقدار پیشفرض مناسب. - 
تکرار به جای بازگشت: بازگشت اگرچه زیباست اما برای مجموعه دادههای بزرگ ناکارآمد است. استفاده از حلقه برای محاسبه اعداد فیبوناچی و اجتناب از محدودیت عمق بازگشت.
 
کد بهینهسازی شده
روش 1: بازگشت با حافظهسازی
def fib(n, memo={}):
    if n < 0:
        raise ValueError("ورودی باید یک عدد صحیح غیر منفی باشد")
    if n <= 2:
        return 1
    if n in memo:
        return memo[n]
    memo[n] = fib(n-1, memo) + fib(n-2, memo)
    return memo[n]روش 2: تکرار
def fib(n):
    if n < 0:
        raise ValueError("ورودی باید یک عدد صحیح غیر منفی باشد")
    if n <= 2:
        return 1
    
    a, b = 1, 1
    for _ in range(3, n+1):
        a, b = b, a + b
    return bتوضیح
- 
بازگشت با حافظهسازی:
- از دیکشنری 
memoبرای ذخیره اعداد فیبوناچی محاسبه شده استفاده میکند - قبل از هر فراخوانی بازگشتی، 
memoرا بررسی میکند و در صورت وجود نتیجه، مستقیماً آن را برمیگرداند - برای ورودیهای منفی 
ValueErrorپرتاب میکند 
 - از دیکشنری 
 - 
تکرار:
- از متغیرهای 
aوbبرای ذخیره دو عدد فیبوناچی آخر استفاده میکند - اعداد فیبوناچی را در یک حلقه از 
3تاnمحاسبه میکند - همچنین برای ورودیهای منفی 
ValueErrorپرتاب میکند 
 - از متغیرهای 
 
خلاصه
کد بهینهسازی شده کارایی را بهبود میبخشد و موارد حدی را به درستی مدیریت میکند. هر دو روش حافظهسازی و تکرار تکنیکهای بهینهسازی مؤثری هستند و انتخاب بین آنها به نیازمندیها و سناریوهای خاص بستگی دارد.
کد تولید پاسخ
from openai import OpenAI
client = OpenAI(
    base_url="https://api.deepseek.com/",
    api_key="<YOUR_API_KEY>"
)
completion = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {
            "role": "user",
            "content": "کد بالا ناکارآمد است و موارد حدی را مدیریت نمیکند. لطفاً مشکلات و راهحلها را توضیح دهید و کد را بهینهسازی کنید."
        }
    ]
)
print(completion.choices[0].message.content)