Почему функция возвращает None?
Если условие не выполняется, то функция ничего не возвращает и в переменной ans оказывается None.
а где return добавьте и функция начнет вам возвращать то что вы ожидаете.
return longest_substring(string, substring_len - 1)