سؤال

ويقول هناك وظيفة لحساب مضروب (ن)

هل مضروب (7) بإنشاء 7 وجوه وظيفة لكل من ن 1-7

وواستخدام تلك القيم عند الضرورة من أي وقت مضى (للمضروب (8) كما مثل مضروب (7) * 8)

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

المحلول

وذلك يعتمد على اللغة وتطبيق لغة.

في العديد من اللغات وظيفية (مثل هاسكل)، ويضمن وظيفة لتغيير أي شيء. فقط لإرجاع قيمة. هذا النقص في آثار جانبية يسمح اللغة لنتذكر / ذاكرة التخزين المؤقت، أو "memoize"، نتائج المكالمات وظيفة.

في لغة أقل تطورا، قد وضعت 7 متميزة إطارات استدعاء دالة على المكدس وانتشرت قبالة.

وثمة وظيفة عاملية مكتوبة بشكل صحيح في العديد من اللغات وظيفية من شأنه أيضا أن يكون الذيل العودية. في هذه الحالة قد تختار لغة للقفز ببساطة من الجزء السفلي من وظيفة إلى الأعلى لتجنب خلق استدعاء دالة أخرى. في هذه الحالة لغة تحول وظيفة متكررة في حلقة "مجانا".

نصائح أخرى

وهذا يعتمد، يبدو وكأنه كنت تتحدث عن وظيفة عاملية متكررة:

int factorial(int n) {
    return n>=1 ? n * factorial(n-1) : 1;
}

وهذه الوظيفة سوف تحتج نفسها متكرر عدد المرات اللازمة لحساب مضروب معين (ن).

يمكن أن تتحول

ومعظمهم من جميع وظائف عودي إلى حل تكرارية باستخدام كومة تتراكم نتائج متتالية ...

int factorial(int n) {
    int accu = 1;
    int i;
    for(i = 1; i <= n; i++) {
        accu *= i;
    }
    return accu;
}

وما في وسعها. ما كنت طالبا الأصوات مثل التحفيظ - يمكنك تخزين النتائج السابقة لتسريع العمليات الحسابية لاحقا. لذلك، على سبيل المثال، إذا كنت احسب 9 !، يمكنك تخزين قيم 1! .. 9 !، وإذا كنت تسأل عن 8! في وقت لاحق يمكنك فقط إرجاع القيمة المخزنة. وبالمثل، إذا طلب منها ذلك لمدة 10 !، يمكنك حساب 10 × 9! بسرعة.

والشيء هو أن مضروب (<م> ن ) تنمو بسرعة، للقيم كبيرة من ن يمكن أن ينتهي بك الأمر باستخدام الكثير من التخزين، وبالتالي فإن التجارة الزمكان قد لا يكون من المجدي.

وظيفة أخرى التي يمكن استخدامها بشكل فعال التحفيظ والحوسبة أرقام فيبوناتشي.

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