Funkcja rekurencyjna

0

Napisz rekurencyjną funkcję, która dla podanych k i n oblicza k-ty wyraz ciągu danego wzorem:       
c0 = n
ck = (ck−1)/2 dla ck−1 parzystego
ck = 3·(ck−1) +1 dla ck−1 nieparzystego.

Napisz program, który wczytuje od użytkownika liczbę n i k, a następnie oblicza k-ty wyraz ciągu (ck) i go wyświetla.

*w tym ck-1 w nawiasie chodzi że to jest indeks dolny czyli np. wyraz o indeksie 5tym - 1

i teraz napisałem taki o to program:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("podaj ilosc wyrazow i pierwszy wyraz ciagu!\n");
    int k, n;
    scanf("%d%d",&k,&n);
    int ciag(k,n);

}
int ciag ( ilosc_wyrazow,wyraz_pierwszy)
{
    if (ilosc_wyrazow == 0  )
        return wyraz_pierwszy;
    if (ilosc_wyrazow%2 == 0)
    {
        return ciag(ilosc_wyrazow-1/2);
    }
    else
    {
            return ciag(3*ilosc_wyrazow+1);
    }
}

Program nie wiem dlaczego ale zawsze po wpisaniu jakiejkolwiek liczby zwraca mi wartość 2. Proszę o pomoc gdyż to moje pierwsze starcie z rekurencją i chcę ją zrozumieć

2

Myślę, że chodziło o coś takiego

int ciag( int ilosc_wyrazow, int wyraz_pierwszy )
    {
        if( ilosc_wyrazow == 0 )
            return wyraz_pierwszy;
        if( ilosc_wyrazow % 2 == 0 )
        {
            return ciag( ilosc_wyrazow - 1, wyraz_pierwszy ) / 2;
        }
        else
        {
            return 3 * ciag( ilosc_wyrazow - 1, wyraz_pierwszy ) + 1;
        }
    } 

Poza tym nie wiem jakim cudem Ci się tamto kompilowało

0

Nie mam zielonego pojęcia dlaczego ale ciągle kompilator zwraca mi wartość 2 nawet po zmianach.

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