انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: اشکال کد (پایتون) (حل شد)  (دفعات بازدید: 1426 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین mohsen100

  • Jr. Member
  • *
  • ارسال: 34
اشکال کد (پایتون) (حل شد)
« : 28 دی 1395، 11:59 ب‌ظ »
سلام

اشکال کد زیر چیه؟

این کد اعداد ۱۰۰۰۰ به پایین رو چاپ می‌کنه .

اما وقتی‌ به ۹۰۰۰ میرسه  خطا میده.

چطور میشه خطا رو برطرف کرد

ممنون

 
def eo(x):
    if x > 0:
        print(x)
        eo(x - 1)
eo(10000)
[/b]
« آخرین ویرایش: 09 بهمن 1395، 05:37 ب‌ظ توسط mohsen100 »

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : اشکال کد (پایتون)
« پاسخ #1 : 29 دی 1395، 12:40 ق‌ظ »
سلام دوست عزیز
والا توابع بازگشتی اصلا ایده ی خوبی برای برنامه نویسی توی پروژه های بزرگ نیستش
به خصوص این که بخوای اونو توی پایتون که به خودی خود کند هست پیاده سازیش کنی
این رو خود توسعه دهندگان پایتون هم دونستن برای همین یک سقف تعیین کردن که اگر مصرف برنامه ی شما بالاتر از اون رفت ناخداگاه برنامه break بشه تا از overfolw جلوگیری بکنه
توصیه ی من به شما اینه که بدون توابع بازگشتی و با استفاده از for برنامه تون رو بنویسین
یا اگر خیلی مصر هستین به اجرای توابع بازگشتی از زبان سی استفاده کنین
ولی اگر خیلی خیلی مصر هستین (که من واقعا دلیلی برای این حد از اصرار نمی بینم) که تو پایتون بخواین این برنامه رو بنویسین شما باید محدودیت توابع بازگشتی رو از طریق sys.setrecursionlimit تغییر بدین که من به هیچ عنوان اون رو توصیه نمی کنم

آفلاین Borderliner

  • Full Member
  • *
  • ارسال: 115
  • جنسیت : پسر
  • macOS Sierra 10.12.6
    • Borderliner | GitHub
پاسخ : اشکال کد (پایتون)
« پاسخ #2 : 29 دی 1395، 01:05 ق‌ظ »
سلام

اشکال کد زیر چیه؟

این کد اعداد ۱۰۰۰۰ به پایین رو چاپ می‌کنه .

اما وقتی‌ به ۹۰۰۰ میرسه  خطا میده.

چطور میشه خطا رو برطرف کرد

ممنون

 
def eo(x):
    if x > 0:
        print(x)
        eo(x - 1)
eo(10000)
[/b]

پایتون متاسفانه از Tail recursion استفاده نمیکنه، برای همین به محدودیت برمیخورید و خطای زیر رو دریافت میکنید:
RecursionError: maximum recursion depth exceeded while calling a Python object
برای همین توصیه من هم مثل دوست قبلی، استفاده از روش غیر بازگشتیه. ولی اگه کارتون گیره، این دو خط رو به بالای کد اضافه کنید تا محدودیت عمق توابع بازگشتی رو افزایش بدید:

import sys
sys.setrecursionlimit(15000)
..::Borderliner::..