Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz
  • 0

Zadanie w c#-rekurencja


Pitagoras333

Pytanie

Opublikowano

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);
           }

 

3 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Opublikowano

Ż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+.

Opublikowano

Bo kompilator nie wie, że zawsze jakiś IF zwróci wartość. Musisz poza tymi ifami przed koncem funkcji dac jeszcze jakiegos returna.

<>

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...