Wątek przeniesiony 2020-11-23 09:13 z C# i .NET przez ŁF.

Rekurencja

0

Witam, Nie do końca potrafię zrozumieć dlaczego działa poprawnie kod niezależnie od wprowadzenia kolejności liczb.
Tzn. jeśli podam pierw większą liczbę np.
podaje a = 20 i b = 3
Pierwszy krok reszta z dzielenia 20 % 3 = 2
Wiec posiadam a = 3 i b = 2 = > 3 % 2 = 1
= > a = 2 b = 1 = > 2 % 1 = 0
( tutaj wychodzi 0 zero wiec poprzednia wartość b =1 jest naszym wspólnym dzielnikiem )
Do tego momentu rozumie ze rekurencja pobiera wartość b do momentu uzyskania 0,
Jeżeli wprowadzę odwrotnie liczby
b = 3 i a = 20, program dalej podaje właściwy wynik a ja osobiście się gubię przy pierwszym kroku.
3 % 20 = ???
( czy operator Modulo % działa w dwie strony ? )

        {
            if (b == 0) return a;
            else return NWD(b, a % b);
        }

        static void Main(string[] args)
        {
            int a, b;
            Console.WriteLine("Podaj a i b : ");
            a = int.Parse(Console.ReadLine());
            b = int.Parse(Console.ReadLine());

            Console.WriteLine("NWD = {0} ", NWD(a, b));
            Console.ReadKey();
        }
2

Zauważ, że jeśli podasz liczby "na odwrót", np. a=3, b=20, to return NWD(b, a % b) będzie równe return NWD(20, 3 % 20); czyli return NWD(20, 3);, o którym wiemy, że zwraca prawidłowy rezultat :-)

2

@Alid Ek: ok wiec, ile razy 20 mieści się w 3? 0 razy i reszta 3 ;) Mam nadzieje ze pomogłem.

Edit.
Wydaje mi się, że rozumiesz rekurencje, to z mod masz problem

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