NWD rekurencyjnie

0

Dlaczego się to nie kompiluje??

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

int wynik;
int funkcja(int, int);

int main(void)
{
	int x, y;
	
	printf("podaj liczbe:\n");
	scanf("%d", &x);
	fflush(stdin);
	
	printf("podaj liczbe:\n");
	scanf("%d", &y);
	fflush(stdin);
	
	printf("NWD: %d", funkcja(x, y));
	putchar('\n');
	
	system("pause");
}

int funkcja(int a, int b, int wynik = 0)
{
	int z;
	if(b != 0)
	{
		z = a % b;
		a = b;
		b = z;
		
		wynik = a;
		funkcja(a, b, wynik);
	}
	
	return wynik;
}
0

Zamiast if, w funkcji powinieneś użyć while. Poza tym, dlaczego do funkcji przekazujesz parametr wynik?

0

Tak, to powinno wyglądać:

 int funkcja(int a, int b)
{
    int c;
    while (b != 0)
    {
          c = a % b;
          a = b;
          b = c;

    }
    return a;
}
0

jej nie przekazuje wyniku to kompilator się narzeka że powinny być dane 3 element, a jak przekazuje wynik to chyba nic się nie dzieje, bo jak robię rekurencje z parametrem to funkcja nie powinna się wracać przez kolejne poziomy

0

<image>upload.wikimedia.org/wikipedia/pl/math/6/8/b/68bd51f2cee1ae0baf83877612aab75e.png </image>

0

Kod C/C++/Java/itp

    int nwd(int a, int b) {
        return b == 0 ? a : nwd(b, a % b);
    }

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