Синтаксически код C ++ идентичен тому же коду, написанному на C #.Не позволяйте языковым несоответствиям застать вас врасплох!На самом деле это выглядит как C, учитывая, что переменная объявлена в верхней части функции;это не обязательно в C ++ или C #.Я предпочитаю объявлять переменные при первом их использовании, объединяя объявление и инициализацию в одном выражении, но это всего лишь стилистическое предпочтение, которое не меняет функции кода.
Я постараюсьобъясните это, добавив комментарии к каждой строке фрагмента кода:
// Declare a function named "Factorial" that accepts a single integer parameter,
// and returns an integer value.
int Factorial(int number)
{
// Declare a temporary variable of type integer
int temp;
// This is a guard clause that returns from the function immediately
// if the value of the argument is less than or equal to 1.
// In that case, it simply returns a value of 1.
// (This is important to prevent the function from recursively calling itself
// forever, producing an infinite loop!)
if(number <= 1) return 1;
// Set the value of the temp variable equal to the value of the argument
// multiplied by a recursive call to the Factorial function
temp = number * Factorial(number - 1);
// Return the value of the temporary variable
return temp;
}
Рекурсивные вызовы просто означают, что функция вызывает себя из одной и той же функции.Это работает, потому что факториал n эквивалентен следующему утверждению:
n! = n * (n-1)!
Один отличный способ понять, как работает код, это добавить его в тестовый проект, а затем выполнить один шагчерез код с помощью отладчика.Visual Studio имеет очень богатую поддержку для этого в приложениях C #.Вы можете наблюдать, как функция рекурсивно вызывает себя, наблюдая, как каждая строка выполняется последовательно, и даже наблюдая, как значения переменных меняются по мере выполнения над ними операций.