• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
192 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 Dyskutant (7,560 p.)
edycja 3 stycznia 2023 przez polandonion
zad 2. prostsza metoda

https://ideone.com/v5Yt1E
komentarz 4 stycznia 2023 przez mokrowski Mędrzec (156,320 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 (278,610 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,340 p.)
Tablice to lepiej będzie dzielic na dwie 'połowy'.
komentarz 4 stycznia 2023 przez mokrowski Mędrzec (156,320 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 1,106 wizyt
pytanie zadane 10 grudnia 2018 w C# przez Zuber Nowicjusz (230 p.)
+1 głos
1 odpowiedź 163 wizyt
0 głosów
4 odpowiedzi 1,171 wizyt
pytanie zadane 28 października 2018 w JavaScript przez Mikołaj Użytkownik (780 p.)

93,173 zapytań

142,184 odpowiedzi

321,967 komentarzy

62,499 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1149p. - dia-Chann
  2. 1131p. - Łukasz Piwowar
  3. 1124p. - CC PL
  4. 1118p. - Łukasz Eckert
  5. 1097p. - Michal Drewniak
  6. 1081p. - Marcin Putra
  7. 1076p. - rucin93
  8. 1047p. - Piotr Aleksandrowicz
  9. 1000p. - ssynowiec
  10. 967p. - rafalszastok
  11. 947p. - Adrian Wieprzkowicz
  12. 842p. - Dawid128
  13. 826p. - Michał Telesz
  14. 819p. - Mariusz Fornal
  15. 814p. - Mikbac
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...