Funkcja szukająca rekurencyjne największego elementu w tablicy

0

Mam problem z dwoma zadaniami.

Zadanie 1 polega na napisaniu funkcji, która w sposób rekurencyjny, znajdzie wartość największego elementu w tablicy. Mam coś takiego:

int max(const int arr[], int size) {
    if (size == 1) {
        return arr[0];
    }
    int find = max(arr + 1, size - 1);
    return (arr[0] > find) ? arr[0] : find;
}

Jednak mój program się rozsypuje podczas testowania.

Zadanie 2
Napisz funkcję, która w sposób rekurencyjny, będzie odwracać podaną liczbę. Odwrócenie liczby oznacza, utworzenie nowej liczby składającej się z tych samych cyfr, tylko w odwrotnej kolejności. Na przykład, dla liczby 12 liczba odwrócona będzie równa 21. W przypadku zer znajdujących się na końcu liczby zostają one pominięte w trakcie procesu odwracania, to znaczy, że liczba odwrócona dla liczby 100 to 1 (tak samo jak dla liczby 10).

Moja funkcja wygląda tak:

unsigned long reverse_number(unsigned long a) {
    if (a < 10) return a;
    return (a % 10) * pow(10, floor(log10(a))) + reverse_number(a / 10);
}

Problemem jest jednak to, że nie mogę korzystać z biblioteki math.h, więc funkcje pow, logarytm itd. odpadają. Jak mogę to zapisać inaczej, bez użycia biblioteki math.h?

1

Ad 1. Prawdopodobnie wywołujesz to jako x=max(table,size); więc jak size dojdzie do 1 zwrócisz zerowy element.

#include <limits>
#include <algorithm>
using namespace std

int max(const int arr[],size_t size,int value=numeric_limits<int>::min())
{
    if(size--) return value;
    return ::min(value,arr[size]);
}

Ad 2. W takim przypadku znowu dodatkowy parametr: unsigned long reverse_number(unsigned long a,unsigned long prev=0)

1 użytkowników online, w tym zalogowanych: 0, gości: 1