рд╕рдВрдХрд▓рди рдХреЗ рдЪрд░рдг рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЬрд╛рджреВ рдпрд╛ рддрдереНрдпрд╛рддреНрдордХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ

рд╢реБрдн рджрд┐рди, рд╣рдмрд░рд▓реБрдбреА!

C ++ рдЧреБрд░реБ, рд╕рд╛рде рд╣реА рдЬреЛ рд▓реЛрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╡реЗ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдпрд╣рд╛рдВ рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рд╢реАрд░реНрд╖рдХ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЕрднреА рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ (рдФрд░ рднрд▓реЗ рд╣реА рдпрд╣ рдЙрдареА рд╣реЛ, рд▓реЗрдХрд┐рди рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреА рдорджрдж рд╕реЗ рдирд╣реАрдВ), рддреЛ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред


рджрд░рдЕрд╕рд▓, рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓:
#include <iostream> template<int n> class Factorial { public: static const int f = Factorial<n - 1>::f * n; }; template<> class Factorial<0> { public: static const int f = 1; }; int main() { std::cout << Factorial<5>::f << std::endl; // 120 } 


рдЖрдЗрдпреЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХреНрдпрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреБрдЫ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ - рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдореВрд▓реНрдп рдХреНрдпреЛрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ? рдЙрддреНрддрд░ C ++ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдЖрдзрд╛рд░ рд╣реИред рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬреЛ рдиреНрдпреВрдирддрдо рджреЛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
 template<class T> const T& min(const T& a, const T& b) { return (a < b) ? a : b; } 

рдлрд┐рд░ рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 min(2, 3) 

рдЯрд╛рдЗрдк рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдк рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
 min(2.0, 3.0) 

рдпрд╣ рджреЛрд╣рд░реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рдЕрдм, рдЕрдкрдиреЗ рддрдереНрдп рдкрд░ рд▓реМрдЯрддреЗ рд╣реБрдП, рд╣рдо рдпрд╣ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлреИрдХреНрдЯрд░рд┐рдпрд▓ <5> рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлреИрдХреНрдЯрд░рд┐рдпрд▓ <4> рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╢реВрдиреНрдп рдкрд░, рдЬрд╣рд╛рдБ рдлреИрдХреНрдЯрд░рд┐рдпрд▓ <0> :: f рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ ( рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЗ рдХрд╛рд░рдг < > )ред рдпрд╣ рдЕрдВрддрд┐рдо рдЪрд░рдг "рдкреБрдирд░рд╛рд╡рд░реНрддреА" рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреАрдврд╝реА рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╕реНрд╡рдпрдВ рддрдереНрдпрд╛рддреНрдордХ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдерд┐рд░ рд╕реНрдерд┐рд░рд╛рдВрдХ int int f рдПрдХ рд╕реНрдерд┐рд░ рд╕рдордп рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЗрд╕ рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдХреБрдЫ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдорд╛рди рдХреЛ рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдПрдХ рд╢рд╛рдВрдд рд╕рдВрдХрд▓рди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдмреНрд░реВрд╕ рдПрдХреЗрд▓ рдХреА рдкреБрд╕реНрддрдХ рдлрд┐рд▓реЛрд╕реЙрдлреА рдСрдл рд╕реА ++ рдореЗрдВред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЙрдкрд░реЛрдХреНрдд рд╕реЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реИ):
 template<int n> struct { enum {val = Factorial<n - 1> * n}; }; template<> struct Factorial<0>{ enum {val = 1}; }; 


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рддрдереНрдпрд╛рддреНрдордХ рдЧрдгрдирд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд╛рд╡рд░ q, рдкреВрд░реНрдгрд╛рдВрдХ p рддрдХ рдмрдврд╝рд╛рдХрд░, рд▓реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 int power = 1; while (q--) power *= p; 


рд▓реЗрдХрд┐рди рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдорджрдж рд╕реЗ рднреА рд╕рдВрднрд╡ рд╣реИ:
 template<int p, int q> class Power { public: static const int value = p * Power<p, q - 1>::value; }; template<int p> class Power<p, 0> { public: static const int value = 1; } 


рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдХреЛрд▓ рдкрд░, рдлрд┐рд▓реЙрд╕рдлреА рд╕реА ++ рдкреБрд╕реНрддрдХ рдореЗрдВ ред рдкреНрд░реИрдХреНрдЯрд┐рдХрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ , рдпрд╛ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбреНрд░реЗрд╕реНрдХреБ рдХреА рдкреБрд╕реНрддрдХ рдореЙрдбрд░реНрди рдбрд┐рдЬрд╝рд╛рдЗрди рдЗрди рд╕реА ++ ред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/In118429/


All Articles