Looking for c# Keywords? Try Ask4Keywords

C# Language Расчет PowerOf


пример

Вычисление мощности заданного числа может быть также рекурсивным. Учитывая базовое число n и показатель e , мы должны обязательно разделить проблему на куски, уменьшив показатель e .

Теоретический пример:

  • 2² = 2x2
  • 2³ = 2x2x2 или, 2³ = 2² x 2
    Там лежит секрет нашего рекурсивного алгоритма (см. Код ниже). Речь идет о том, чтобы решить проблему и разделить ее на меньшие и более простые, чтобы решить куски.
  • Заметки
    • когда базовое число равно 0, мы должны знать, что он возвращает 0 как 0³ = 0 x 0 x 0
    • когда показатель степени равен 0, мы должны знать, что всегда нужно возвращать 1, поскольку это математическое правило.

Пример кода:

public int CalcPowerOf(int b, int e) {
    if (b == 0) { return 0; } // when base is 0, it doesn't matter, it will always return 0
    if (e == 0) { return 1; } // math rule, exponent 0 always returns 1
    return b * CalcPowerOf(b, e - 1); // actual recursive logic, where we split the problem, aka: 2³ = 2 * 2² etc..
}

Тесты в xUnit для проверки логики:
Хотя это необязательно, всегда полезно писать тесты для проверки вашей логики. Я включаю те, которые здесь написаны в рамках xUnit .

    [Theory]
    [MemberData(nameof(PowerOfTestData))]
    public void PowerOfTest(int @base, int exponent, int expected) {
        Assert.Equal(expected, CalcPowerOf(@base, exponent));
    }

    public static IEnumerable<object[]> PowerOfTestData() {
        yield return new object[] { 0, 0, 0 };
        yield return new object[] { 0, 1, 0 };
        yield return new object[] { 2, 0, 1 };
        yield return new object[] { 2, 1, 2 };
        yield return new object[] { 2, 2, 4 };
        yield return new object[] { 5, 2, 25 };
        yield return new object[] { 5, 3, 125 };
        yield return new object[] { 5, 4, 625 };
}