Skocz do zawartości
  • 0

Zadanie w c#-rekurencja


Pitagoras333
 Udostępnij

Pytanie

Hejka mam do zrobienia następujące zadanie:

Stwórz funkcję: long Pomnoz(int n) Funkcja rekurencyjnie oblicza iloczyn wszystkich liczb całkowitych znajdujących się między liczbą n (włącznie) przesłaną jako argument funkcji a liczbą 0 (wyłączając 0). Dla n = 0 funkcja zwraca 0.

Dla liczb dodatnich nie ma problemu natomiast gdy chce uwzględnić także ujemne, kompilator mówi że nie wszystkie ścieżki funkcji zwracają wartość, i nie wiem jak to naprawić, oto mój kod:

static int Pomnoz(int n)
        {
            if (n == 0)
                return 0;
            if (n == 1)
                return 1;
           if (n>0)
            {
                return n * Pomnoz(n - 1);
            }
           
            
            if(n<0)
            {
                return n * Pomnoz(n + 1);
           }

 

Odnośnik do komentarza
Udostępnij na innych stronach

3 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Żeby zrobić liczby ujemne musiałbyś dodać warunek, że dla n = -1 zwraca -1. 

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Multiply(5));
        Console.WriteLine(Multiply(7));
        Console.WriteLine(Multiply(-5));
        Console.WriteLine(Multiply(-3));
    }

    static int Multiply(int n)
    {
        if (n == 0)
        {
            return 0;
        }

        if (n == 1)
        {
            return 1;
        }

        if (n < 0)
        {
            return n * Multiply(n + 1);
        }
        
        return n * Multiply(n - 1);
    }
}

Output:

120
5040
0
0

 

Dla

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Multiply(5));
        Console.WriteLine(Multiply(7));
        Console.WriteLine(Multiply(-5));
        Console.WriteLine(Multiply(-3));
    }

    static int Multiply(int n)
    {
        if (n == -1)
        {
            return -1;
        }
        
        if (n == 0)
        {
            return 0;
        }

        if (n == 1)
        {
            return 1;
        }

        if (n < 0)
        {
            return n * Multiply(n + 1);
        }
        
        return n * Multiply(n - 1);
    }
}

Output

120
5040
-120
-6

W pierwszym wypadku dla liczby n >0 nie ma problemu ze względu, że n = 1 zwróci 1 i w tym miejscu zakończy się rekurencja. Dla ujemnych bez zdefiniowanego n = -1 zwracającego -1 leci aż do 0 włącznie, więc wynik zawsze będzie wychodził 0.

 

Co do ścieżek nie wiem czy to temu, ale u mnie IDE się irytuje kiedy wszystkie returny są w ifach i istnieje zagrożenie, że któreś mogłoby się nie wykonać, więc wszystkie przypadki opakowałem w ify oprócz jednego, w tym wypadku zostawiłem poza ifem to co wykonałoby się dla n należy do N+.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Ostatnio przeglądający forum Zadanie w c#   0 użytkowników
    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...