rekurencja

0

Stwórz funkcję: long PomnozNiepodzielne(int n) Funkcja rekurencyjnie oblicza iloczyn wszystkich liczb całkowitych znajdujących się między liczbą n przesłaną jako argument funkcji a liczbą 0 (wyłączając 0), które jednocześnie spełniają obydwa warunki: są niepodzielne przez 7 oraz niepodzielne przez 5. Dla n = 0 funkcja zwraca 0.

Niby taka prosta funkcja a mam problem z napisaniem kodu.
Pozdrawiam

0
    class Program
    {
        static long PomnozNiepodzielne(int n)
        {
            if (n==0)
            {
                return 0;
            }
            if (n>0)
            {
                PomnozNiepodzielne(n - 1);
            }
            if (n<0)
            {
                PomnozNiepodzielne(n + 1);
            }
            if (n%5 != 0 && n% 7 != 0)
            {
                n *= n;
            }
            return n;

        }
        static void Main(string[] args)
        {

            Console.WriteLine(PomnozNiepodzielne(-5));
            Console.ReadKey();
        }
    }
}
0

A co jest nie tak z tym kodem?

0

Może ktoś zaproponuje przykładowe rozwiązanie?

2

Tak to wygląda w pseudokodzie:

function mult_not_divisible(n):
	if n == 1:
		return 1
	else if n % 35 == 0:
		return n * mult_not_divisible(n - 1)
	else:
		return mult_not_divisible(n - 1)

Jak jest proste zadanie rekurencyjne, to zwyczajnie Przepisujesz treść zadania w kod, pamietając tylko o właściwym warunku stopu.

0

nie wiem jak zpisać, żeby funkcja działała dla ujemynch i dodatnich parametrów n

0

Funkcja rekurencyjnie oblicza iloczyn wszystkich liczb całkowitych znajdujących się między liczbą n przesłaną jako argument funkcji a liczbą 0 (wyłączając 0), które jednocześnie spełniają >obydwa warunki: są niepodzielne przez 7 oraz niepodzielne przez 5. Dla n = 0 funkcja zwraca 0.

Czyli nie wliczamy liczb ujemnych, całkowite większe niż zero.

0

w zadaniu na RUNCODE muszą być ujemne

0

To źle Opisałeś problem od początku; Napisz prawdziwą treść zadania, a nie Ściemniaj.

0

treść zadania jest jak podałem, tylko program testuje aplikacja Runcode i sprawdza program dla dodatnich i ujemnych parametrów

ID: 3 Funkcja: PomnozNiepodzielne Parametry: System.Int32: 2 Oczekiwano: System.Int64: 2 Zwrócono: System.Int64: 0", "
ID: 5 Funkcja: PomnozNiepodzielne Parametry: System.Int32: 5 Oczekiwano: System.Int64: 24 Zwrócono: System.Int64: 0", "
ID: 7 Funkcja: PomnozNiepodzielne Parametry: System.Int32: 15 Oczekiwano: System.Int64: 17791488 Zwrócono: System.Int64: 0", "
ID: 9 Funkcja: PomnozNiepodzielne Parametry: System.Int32: -2 Oczekiwano: System.Int64: 2 Zwrócono: System.Int64: 0", "
ID: 11 Funkcja: PomnozNiepodzielne Parametry: System.Int32: -5 Oczekiwano: System.Int64: 24 Zwrócono: System.Int64: 0", "
ID: 2 Funkcja: PomnozNiepodzielne Parametry: System.Int32: 1 Oczekiwano: System.Int64: 1 Zwrócono: System.Int64: 0", "
ID: 4 Funkcja: PomnozNiepodzielne Parametry: System.Int32: 3 Oczekiwano: System.Int64: 6 Zwrócono: System.Int64: 0", "
ID: 6 Funkcja: PomnozNiepodzielne Parametry: System.Int32: 10 Oczekiwano: System.Int64: 10368 Zwrócono: System.Int64: 0", "
ID: 8 Funkcja: PomnozNiepodzielne Parametry: System.Int32: -1 Oczekiwano: System.Int64: -1 Zwrócono: System.Int64: 0", "
ID: 10 Funkcja: PomnozNiepodzielne Parametry: System.Int32: -3 Oczekiwano: System.Int64: -6 Zwrócono: System.Int64: 0", "
ID: 12 Funkcja: PomnozNiepodzielne Parametry: System.Int32: -10 Oczekiwano: System.Int64: -10368 Zwrócono: System.Int64: 0", "
ID: 1 Funkcja: PomnozNiepodzielne Parametry: System.Int32: 0 Oczekiwano: System.Int64: 0 Zwrócono: System.Int64: 0" ]

0

To jest sprzeczne z trescią zadania.

0

liczby całkowite też mogą być ujemne, na tym polega trudność zadania

0
lion137 napisał(a):

Tak to wygląda w pseudokodzie:

function mult_not_divisible(n):
	if n == 1:
		return 1
	else if n % 35 == 0:
		return n * mult_not_divisible(n - 1)
	else:
		return mult_not_divisible(n - 1)

Jak jest proste zadanie rekurencyjne, to zwyczajnie Przepisujesz treść zadania w kod, pamietając tylko o właściwym warunku stopu.

Wg treści zakres może być (-n, 0) lub (0, n)
Dla liczb ujemnych powinno się wykonywać n + 1, a w warunek powinien być n % 5 != 0 && n % 7 != 0.

1

To można łatwo rozbić to na dwie funkcje:

def mult_not_divisible(n):
	if n == 0: 
		return 0
	if n < 0: 
		return f1(n)
	if n > 0: 
		return f(n)

def f(n):
	if n == 1:
		return 1
	else if not (n % 7 == 0 or n % 5 == 0):
		return n * f(n - 1)
	else:
		return f(n - 1)

def f1(n):
	if n == -1:
		return 1
	else if not (n % 7 == 0 or n % 5 == 0):
		return n * f1(n + 1)
	else:
		return f1(n + 1)
1
lion137 napisał(a):

To można łatwo rozbić to na dwie funkcje:

def mult_not_divisible(n):
	if n == 0: 
		return 0
	if n < 0: 
		return f1(n)
	if n > 0: 
		return f(n)

def f(n):
	if n == 1:
		return 1
	else if n % 35 == 0:
		return n * f(n - 1)
	else:
		return f(n - 1)

def f1(n):
	if n == -1:
		return 1
	else if n % 35 == 0:
		return n * f1(n + 1)

Ten warunek wg. mnie jest błędny: n % 35 == 0, warunek wg założeń ma sprawdzać niepodzielność przez 5 i 7, i jeśli jest prawdziwy to mnożymy kolejne niepodzielne liczby.
Czyli albo robimy

if n % 5 != 0 && n % 7 != 0:
    return n * f(n - 1)
else:
     return f(n - 1)

albo

if n % 35 == 0:
   return f(n - 1) 		
else:
  return n * f(n - 1)
0

He, he, rzeczywiście, standardowo żle przeczytałem ("niepodzielne", a nie "podzielne"), ale tak jak Piszesz można łatwo zmienić warunki, zedytowałem post.

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