آژانس هواپیماییexchanging

مشكل در رابطه با اجراي تابع ackerman در C++

شروع موضوع توسط fonix light ‏1 مارس 2010 در انجمن خانواده C++ , C

  1. fonix light

    fonix light Registered User

    تاریخ عضویت:
    ‏19 دسامبر 2009
    نوشته ها:
    391
    تشکر شده:
    5
    محل سکونت:
    in your mind
    آقا من دانشجوي رشته ي كامپيوترم . مي خوام تابع ackerman رو تو C++ اجرا كنم و زمان محاسبه رو براي اعداد مختلف اندازه بگيرم . البته اين كارو تا m=3 و n=10 به راحتي انجام مي دم . ولي اعداد بعدي مثل m=4 و n=2 رو نمي تونم محاسبه كنم . وقتي برنامه رو با اين اعداد اجرا مي كنم ، برنامه بسته مي شه . ( چه turbo C++ و چه visual C++ . فرقي نمي كنه . هر دوشون بعد از اجراي برنامه به طور كلي بسته مي شن . )
    از استادم سئوال كردم . گفت مربوط به محافظي مي شه كه تو ويندوز كار گذاشته شده و نمي ذاره از رم بيش از حد استفاده بشه . از يه طرف استاد هم گفته بايد برنامه رو تا شنبه براي اعداد 4و2 اجرا كنيم و زمان رو اندازه بگيريم .
    هر كي مي دونه چه جوري مي شه اين محافظ رو برداشت يا روشي بلده كه مي شه تابع رو براي اعداد بالا محاسبه كرد ، لطفا تو اين تاپيك بنويسه . مر30.:):):)
    اين هم كد تابع ackerman :
    //C++
    int ackerman(int m, int n)
    {
    if (m == 0) return(n+1);
    else if (n == 0) return(ackerman(m-1,1));
    ;(((;else return(ackerman(m-1,ackerman(m,n-1
    } ​
     
    Last edited: ‏1 مارس 2010
  2. NdR

    NdR Registered User

    تاریخ عضویت:
    ‏10 مارس 2004
    نوشته ها:
    86
    تشکر شده:
    0
    این تابع بازگشتیه، در نتیجه برای (ackermann(4, 2 تعداد فراخوانی ها اونقدر بالا میره که stack پر میشه و برنامه بسته میشه. در ضمن مقدار (ackermann(4, 2 عدد بزرگی میشه. یعنی: (19728^10)×2
    اینجا و اینجا رو ببینید.​
     
    Last edited: ‏1 مارس 2010