سؤال

لدي تسلسل.

a1 = 1 - cos(x);
ai = a1 + (-1)^(i-1) * x^(2*i-2) / (2*i-2)!

أحتاج إلى كتابة هذا مع وبدون requension. ولكن لديها نتائج مختلفة.
هنا هو رمزي: http://codepaste.net/q213q6.

هل كانت مفيدة؟

المحلول

سأعمل تحت افتراض أن هذه هي الواجبات المنزلية، إذا كنت مخطئا، فسأعود وتعديل هذا المنصب أو إعادة النشر.

أولا، يجب أن تحاول كتابة وظيفتك العامل بطريقة متكررة. على الرغم من أنها لن تحدث فرقا كبيرا في ج، إلا أنها ممارسات جيدة.

int helper( int x, int acc ) {
    if( x == 0 ) {
        return acc;
    }
    else {
      return helper( x - 1, acc * x );
    }
}

int factorial( x ) {
  helper( x, 1 );
}

بعد ذلك، لا ترغب بشكل عام في وضع حلقة داخل وظائفك العودية، التي تهزم إلى حد ما النقطة. فكر في مكالمة متكررة باعتبارها تكرارا واحدا مع اختبار وإما يعود أو أذكر.

نصائح أخرى

منذ أن كنت تؤدي الحساب النقطة العائمة. طرق مختلفة للتنفيذ يمكن أن تنتج نتائج مختلفة. في حالتك، يمكنني التفكير في مكان واحد حيث يتم تكبد الخسائر

currC = pow(x, 2*i-2);

لا يساوي

  47:          currC = currC * x * x;

للمزيد من المعلومات،http://en.wikipedia.org/wiki/floating_point#multiplication.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top