مثال بازنویسی کد
این مثال نشان میدهد که چگونه با استفاده از 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)