Как рекурсивно найти символ в строке, передавая в параметры только строку и символ

Только начинаю шаги в программировании, пытаюсь освоить c#. Сей час пытаюсь разобраться в рекурсии. Что бы дело пошло, нужно решить задачку: есть строка str и искомая буква value. Нужно найти эту букву в строке и вывести ее позицию. Встроенными функциями string пользоваться запрещено. Естественно все нужно делать через рекурсию. Вот что я написал, но оно не особо работает.

public static int GetIndexOfChar(string str, char value)
{
    if (str is null)
    {
        throw new ArgumentNullException(nameof(str));
    }

    if (string.IsNullOrEmpty(str))
    {
        Console.WriteLine("-1");
    }

    int startIndex = str.Length - (str.Length - 1);

    if (startIndex >= str.Length)
    {
        Console.WriteLine("0");
    }

    if (str[startIndex] == value)
    {
        Console.WriteLine(startIndex);
    }

    return GetIndexOfChar(str[startIndex++..], value);
}

Задачу нужно решать именно "спереди" строки, т.е. икать элемент от 1-го символа к концу. Вот я и не могу придумать, как это реализовать. Через циклы пробовал - задание не проходит проверку, нужно именно рекурсия. Заранее спасибо за ответ.


Ответы (3 шт):

Автор решения: tym32167

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

public static int GetIndexOfChar(string str, char value, int index = 0)
{
    if (index >= (str?.Length ?? -1)) return -1;
    if (str[index] == value) return index;
    return GetIndexOfChar(str, value, index + 1);
}
→ Ссылка
Автор решения: Anton Shchyrov

по условию метод менять нельзя. Т.е. я не могу переписать его, добавив переменную index

public static int GetIndexOfChar(string str, char value)
{
    int len = str?.Length ?? 0;
    if (len == 0) return -1;
    if (str[0] == value) return 0;
    if (len == 1) return -1;
    int res = GetIndexOfChar(str.substring(1), value);
    return ((res == -1) ? -1 : res + 1);
}
→ Ссылка
Автор решения: Peterblr

как образец указан вот такой пример. Но о считает с конца строки

// TODO #1. Analyze the implementation of "GetLastIndexOfChar(string, char)" method, and implement the method using recursion.
// The method should return the position of a "value" char in the "str" string. If "str" string has no "value" char then returns -1.



public static int GetLastIndexOfChar(string str, char value)
        {
            if (str is null)
            {
                throw new ArgumentNullException(nameof(str));
            }

            if (string.IsNullOrEmpty(str))
            {
                return -1;
            }

            if (str[^1] == value)
            {
                return str.Length - 1;
            }

            return GetLastIndexRecursively.GetLastIndexOfChar(str[..^1], value);
        }

Всем огромное спасибо за помощь. Но тернарный оператор - это пока не совсем мой уровень...
→ Ссылка