Silnia wielokrotna

0

Jak by ktoś mógł mi podać przykład jak oblicza się 5 2 kolejno we wzorze; bo mi nie chce wyjść 15.

Zadanie Silnie

Wartość k-tej silni wielokrotnej z liczby n (oznaczaną przez n z k wykrzyknikami) obliczamy ze wzorów n!!...! = 1, jeśli 0<=n<k, oraz n!!...! = n((n-k)!!...!), jeśli n>=k (we wszystkich wzorach występuje po k wykrzykników). Napisz program służący do obliczania wartości silni wielokrotnych.

Wejście

W pierwszej linii wejścia znajduje się jedna liczba całkowita t<=10 oznaczająca liczbę testów.
W kolejnych liniach znajdują się poszczególne testy. Każdy z nich składa się z dwóch liczb całkowitych, n oraz k (1<=n,k<=12).

Wyjście

Dla każdego testu wypisz w osobnej linii wartość k-tej silni liczby n.

Przykład

Wejście:
3
5 1
5 2
10 4

Wyjście:
120
15
60

0

5!! = 5 * (5 - 2)!! = 5 * 3 * (3 - 2)!! = 5 * 3 * 1 = 15
10!!!! = 10 * (10 - 4)!!!! = 10 * 6 * (6 - 4)!!!! = 10 * 6 * 2!!!! = 10 * 6 * 1 = 60

0

Otóż, coś mi słabo idzie, jak mam taką rekurencję: nie wiem czy można aby n i k było parametrami funkcji, tzn można - raczej, ale nie wiem jak by to sie miało do wzoru żeby na koniec zwracało to (n-k) oraz k w postaci niezmienionej i znowu sie wykonało az do 1 i zwróciło wartość do main.

 int silnia (int n)
{
    int licznik=0,k=0; //nie wiem jak by f. wyglądała przy dwóch parametrach więc ilość silni, k, wczytuje tutaj, a ten licznik to tylko po to aby wykonało się tylko raz.
    if (licznik==0)
       {
            cin>>k;
       }
    ++licznik;
    if (n<k && n>=0)
       return 1;
    else 
    {
        return silnia(n-k)*n; 
    }   
}
0
#include <cstdio>

int main() {
    int z;
    scanf("%d", &z);
    while (z--) {
        int n, k;
        scanf("%d %d", &n, &k);
        int r = 1;
        for (int i = n; i >= k; i -= k) {
            r *= i;
        }
        printf("%d\n", r);
    }
}

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