• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcja szukająca rekurencyjne największego elementu w tablicy

Object Storage Arubacloud
+1 głos
142 wizyt
pytanie zadane 3 stycznia 2023 w C i C++ przez kotkrakers Nowicjusz (130 p.)

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?

2 odpowiedzi

0 głosów
odpowiedź 3 stycznia 2023 przez polandonion Mądrala (7,040 p.)
edycja 3 stycznia 2023 przez polandonion
zad 2. prostsza metoda

https://ideone.com/v5Yt1E
komentarz 4 stycznia 2023 przez mokrowski Mędrzec (155,460 p.)
Dla wygody, w 2 argumencie (int odwrocona), można dodać wartość domyślną 0. Będzie wygodniej używać wywołania w programie.

Funkcję można także przepisać na wyrażenie 3-argumentowe. Choć tu będą podzielone zdania co do czytelności...
komentarz 4 stycznia 2023 przez kotkrakers Nowicjusz (130 p.)
Dzięki, zobaczę co uda mi się zrobić :)
0 głosów
odpowiedź 3 stycznia 2023 przez Wiciorny Ekspert (270,110 p.)

Zadanie 2 dla przykładu: 
 

#include <iostream>

int reverse(int n)
{
    if (n == 0 || n % 10 == 0)
        return n;

    // Odwracamy pozostałe cyfry liczby n
    // poprzez rekurencyjne wywołanie funkcji dla n / 10
    int reversed = reverse(n / 10);

    // Mnożymy otrzymaną liczbę przez 10 i dodajemy ostatnią cyfrę
    // liczby n, co skutkuje odwróceniem kolejności cyfr
    return reversed * 10 + n % 10;
}

int main()
{
    std::cout << reverse(1234) << std::endl; // wyświetli 4321
    std::cout << reverse(100) << std::endl; // wyświetli 1
    std::cout << reverse(12340) << std::endl; // wyświetli 432
    std::cout << reverse(0) << std::endl; // wyświetli 0
    return 0;
}

co do zadania pierwszego bez dodatkowych bibliotek 
 

int findLargestElement(int* arr, int size)
{
    if (size == 1) return arr[0];
    int largest = findLargestElement(arr, size - 1);
    return (arr[size - 1] > largest) ? arr[size - 1] : largest;
}


 

komentarz 4 stycznia 2023 przez Oscar Nałogowiec (29,310 p.)
Tablice to lepiej będzie dzielic na dwie 'połowy'.
komentarz 4 stycznia 2023 przez mokrowski Mędrzec (155,460 p.)

@Wiciorny, 

#include <climits>

int findLargestElement(int * arr, std::size_t size, int mx = INT_MIN) {
	if (--size == 0) return mx;
	if (arr[size] > mx) {
		mx = arr[size];
	}
	return findLargestElement(arr, size, mx);
}
komentarz 4 stycznia 2023 przez kotkrakers Nowicjusz (130 p.)

Dzięki, pokombinuję :)

 

Podobne pytania

0 głosów
2 odpowiedzi 922 wizyt
pytanie zadane 10 grudnia 2018 w C# przez Zuber Nowicjusz (230 p.)
+1 głos
1 odpowiedź 146 wizyt
0 głosów
4 odpowiedzi 972 wizyt
pytanie zadane 28 października 2018 w JavaScript przez Mikołaj Użytkownik (780 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...