Когда я компилирую ваш код, я получаю сообщение об ошибке «main. cpp: 14: 1: предупреждение: элемент управления может достигнуть конца непустой функции [-Wreturn-type]».
I думаю, что дизайн предоставленного ответа лучше, потому что он не рискует не вернуть значение, как ваш.
Подумайте, что вам нужно знать, чтобы заставить рекурсивную функцию работать.
1.) Какой базовый случай? На какой самый простой вариант проблемы вы можете сразу ответить? В этом случае это происходит, если у вас есть массив только с одним элементом, который по определению является самым большим в массиве. (Примечание: вам также нужна обработка ошибок для пустых массивов.)
Итак, в простейшем случае вы просто возвращаете единственный элемент в массиве.
Рекурсивный случай требует, чтобы вы подумайте, что произойдет, если вы увеличите размер массива. Предоставленный ответ делает это путем рекурсивного вызова самого себя до тех пор, пока исходный единственный массив длиной len
не будет разделен на len
массивы длины 1. Затем он возвращается вверх по стеку вызовов, многократно возвращая больший из последнего элемента. в массиве и функция, вызываемая для остальных элементов, за исключением последнего.
Это означает, что вы выполняете len
вызовов для arr_max
и len
сравнений. (Если бы массив был действительно большим, у вас могла бы закончиться память, сделав это таким образом.)
Ваша функция принимает базовый случай, когда длина массива равна 0. Но если в массиве нет элементов, то это не так. Нет величайшего элемента. Вместо этого вы возвращаете 0. Это немного странно. Также немного странно то, как вы увеличиваете i
с 0, но рекурсивно вызываете функцию на len-1
.
Я думаю, возможно, вам было бы полезно переосмыслить дизайн с точки зрения базовых и рекурсивных случаев, и Думаю, для этой цели подойдет совет избегать использования статики.