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