NWD rekurencyjnie

FO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 79
0

Dlaczego się to nie kompiluje??

Kopiuj
#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;
}
mic4ael
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

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

mic4ael
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

Tak, to powinno wyglądać:

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

    }
    return a;
}
FO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 79
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

Xitami
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

Kod C/C++/Java/itp

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.