Я изучил рекурсию совсем недавно, и меня встретил вопрос, который я ДОЛЖЕН подойти к нему с помощью рекурсии, которая говорит примерно так: мне нужна функция, которая принимает массив и его размер ...

1
Dark 9 Янв 2021 в 17:48

1 ответ

Лучший ответ

Наиболее очевидная уязвимость вашего кода - это отсутствие определенного поведения для массивов, которые могут иметь одно и то же значение в двух последовательных записях.
Потому что что вы вернете в случае Array[Index] == Array[Index - 1]?
В вашем коде не указано, в нем нет оператора return для этого случая.

Вам нужно решить, хотите ли вы строго по возрастанию, т.е. два одинаковых значения являются ошибкой, или только по возрастанию, т.е. они в порядке.

Для строго по возрастанию сделайте это

if (Array[Index] > Array[Index - 1])
{
    return CheckIfAscending(Array, Index - 1);
} else
{
    return 0;
}     

В противном случае используйте >=.

Вам также необходимо исправить первое условие if (Index < 0), потому что для индекса 0 (на самом деле размер, я думаю ...) вам уже нужно напрямую отвечать, иначе Index - 1 не имеет смысла. Поэтому используйте вместо этого Index <= 0.

1
Yunnosch 9 Янв 2021 в 15:50