rekurencja, bity, system siódemkowy

0

Stwórz funkcję działającą rekurencyjnie uint B3(int n)
Funkcja zwraca pierwszą (najbardziej znaczącą) cyfrę w zapisie siódemkowym (tzn. o podstawie 7) liczby przesłanej w parametrze funkcji. Niedozwolona jest konwersja liczby na napis.
Nie mam kompletnie pomysłu na to zadanie, jedyne co udało mi się wymyślić to to:

static uint B3(int n)
        {
            if (n < 10)
            {
                return (uint)n;
            }
            else
            {
                return B3((siodemkowy(n) - (siodemkowy(n) % 10)) / 10);
            }

        }
        
        static int siodemkowy(int liczba)
        {
            if (liczba == 0)
            {
                return 0;
            }
            else
            {
                return liczba % 7 + 10 * siodemkowy(liczba / 7);
            }
        }
2

Rekurencyjne rozwiązanie zapisuje się tak, jakby się to robiło w głowie, (lub na kartce): ostatnia, najmniej znacząca cyfra, to reszta z dzielenia liczby przez 7, kolejna, to reszta z dzielenia przez 7, liczby podzielonej przez 7, (bez reszty, w liczbach całkowitych), i tak dalej; mając już liczbę mniejszą niż 7 mamy szukaną cyfrę.
Co już się trywialnie przekłada na kod, oczywiście wszystkich cyfr nie ma sensu liczyć:

  uint B3(int n) {
    if (n > 6){
      return B3(n / 7);
    }
    return (uint) n;
  }
0

dzięki bardzo :) czyli ta konwersja na siódemkowy była w sumie niepotrzebna :D

0

A mam jeszcze jedno pytanie co do rekurencji, jak mam takie zadanie: Stwórz funkcję double Pomnoz2(double[] tab, int i), która dokonuje rekurencyjnego mnożenia elementów tablicy podzielnych przez 7 lub 3.
to napisałem w sumie kod:

static double Pomnoz2(double[] tab, int i)
        {
            if (tab.Length == 0)
            {
                return 0;
            }
            if (i >= tab.Length)
            {
                return 1;
            }
            if (tab[i] % 7 == 0 || tab[i] % 3 == 0)
            {
                return Pomnoz2(tab, i + 1) * tab[i];
            }
            else
            {
                return Pomnoz2(tab, i + 1);
            }
        }

ale nie wiem co zrobić, żeby dla liczb które nie spełniają warunków zadania zwracało 0, jak dam return 0 to zawsze bedzie zwracac 0,a przy return 1 dziala przy większości przypadków ale nie przy wszystkich :/

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