25.07.2017 Views

Intro-CSharp-Book-v2015

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

358 Въведение в програмирането със C#<br />

Рекурентна дефиниция<br />

При създаването на нашето решение, много по-удобно е да използваме<br />

съответната рекурентна дефиниция на факториел:<br />

n! = 1, при n = 0<br />

n! = n.(n-1)! за n>0<br />

Намиране на рекурентна зависимост<br />

Наличието на рекурентна зависимост не винаги е очевидно. Понякога се<br />

налага сами да я открием. В нашия случай можем да направим това,<br />

анализирайки проблема и пресмятайки стойностите на факториел за<br />

първите няколко естествени числа.<br />

0! = 1<br />

1! = 1 = 1.1 = 1.0!<br />

2! = 2.1 = 2.1!<br />

3! = 3.2.1 = 3.2!<br />

4! = 4.3.2.1 = 4.3!<br />

5! = 5.4.3.2.1 = 5.4!<br />

От тук лесно се вижда рекурентната зависимост:<br />

n! = n.(n-1)!<br />

Реализация на алгоритъма<br />

Дъното на нашата рекурсия е най-простият случай n = 0, при който<br />

стойността на факториел е 1.<br />

В останалите случаи, решаваме задачата за n-1 и умножаваме получения<br />

резултат по n. Така след краен брой стъпки със сигурност ще достигнем<br />

дъното на рекурсията, понеже между 0 и n има краен брой естествени<br />

числа.<br />

След като имаме налице тези ключови условия, можем да реализираме<br />

метод изчисляващ факториел:<br />

static decimal Factorial(int n)<br />

{<br />

// The bottom of the recursion<br />

if (n == 0)<br />

{<br />

return 1;<br />

}<br />

// Recursive call: the method calls itself<br />

else<br />

{

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!