C#/수업 내용

[C#] 재귀함수

JSH1 2021. 9. 16. 16:09
        public App()
        {
            Console.WriteLine("App");
            SayHelloRecursive(5);            
        }

        //재귀 함수 (메서드)
        //재귀 : 자신을 정의 할때 자신을 재참조 하는 방법 
        void SayHelloRecursive(int n)
        {
            Console.WriteLine("Hello World!");

            if (n == 1) return; // base case 탈출구

            SayHelloRecursive(n - 1); // Recursive case 재귀적 호출부분 
        }


        public App()
        {
            Console.WriteLine(SumRecursive(3, 0));
        }

        // 재귀적인 방법으로 1 ~ n까지의 합을 반환하는 메서드를 정의하고 구현
        int SumRecursive(int n, int count)
        {
            if (n == 0) return count;

            count += n;
            Console.WriteLine(count);
            return SumRecursive(n - 1, count);
        }


        public App()
        {
            TimesTableRecursive(2, 0);
        }

        // 구구단의 단수를 입력받아 재귀적으로 다음과 같이 출력되는 메서드를 작성하세요
        // n = 2

        // 2 x 1 = 2
        // 2 x 2 = 4
        // 2 x 3 = 6
        // 2 x 4 = 8
        // 2 x 9 = 18
        void TimesTableRecursive(int n, int count)
        {
            if (count >= 9) return;

            count++;
            Console.WriteLine("{0} x {1} = {2}", n, count, n * count);

            TimesTableRecursive(n, count);
        }


        public App()
        {
            TimesTableRecursive(2, 0);
        }

        // 구구단의 단수를 입력받아 재귀적으로 다음과 같이 출력되는 메서드를 작성하세요
        // n = 2

        // 2 x 9 = 18
        // 2 x 8 = 16
        // 2 x 7 = 14
        // 2 x 6 = 12
        // 2 x 1 = 2
        void TimesTableRecursive(int n, int count)
        {
            if (count >= 9) return;

            count++;
            TimesTableRecursive(n, count);

            Console.WriteLine("{0} x {1} = {2}", n, count, n * count);

        }


        public App()
        {
            int result = FactorialRecursive(5);
            Console.WriteLine(result);
        }

            // 팩토리얼을 구하는 메서드를 작성하세요        
            // 5! = 5x4x3x2x1
            // 4! = 4x3x2x1
            // 3! = 3x2x1
            // 2! = 2x1
            // 1! = 1
            // 0! = 1
            // int result = Factorial(0);
            // result의 값은 1이다
        
        int FactorialRecursive(int n)
        {
            if (n < 0) return 1;

            Console.Write("{0}! = ", n);

            for (int i=0; i<n; i++)
            {
                Console.Write("{0}", n - i);

                if (n - i != 1) Console.Write("x");
            }

            if (n == 0) Console.Write("1");
            Console.WriteLine();
            
            return FactorialRecursive(n - 1);

        }


        public App()
        {
            FactorialRecursive(9);
        }

        void FactorialRecursive(int n)
        {
            if (n < 0) return;

            Console.Write("{0}! = ", 9 - n);

            int temp = 1;
            for (int i = 0; i < 9-n; i++)
            {
                temp *= i + 1;
            }
            Console.WriteLine(temp);

            FactorialRecursive(n - 1);
        }
        public App()
        {
            FactorialRecursive(9);
        }

        void FactorialRecursive(int n)
        {
            if (n < 0) return;

            FactorialRecursive(n - 1);
            
            Console.Write("{0}! = ", n);

            int temp = 1;
            for (int i = 0; i < n; i++)
            {
                temp *= i + 1;
            }
            Console.WriteLine(temp);
        }


    class App
    {
        Node head;

        public App()
        {
            AddNode(new Node(2));
            AddNode(new Node(4));
            AddNode(new Node(6));
            AddNode(new Node(8));

            Node node = head.GetLastNode();
            Console.WriteLine("Last Node: {0}", node.data);
        }

        void AddNode(Node node)
        {
            if (head == null)
            {
                head = node;
            }

            else
            {
                head.AddNext(node);
            }
        }
    }
    class Node
    {
        public int data;
        public Node next;

        public Node(int data)
        {
            this.data = data;
        }

        public void AddNext(Node nextNode)
        {
            if (this.next == null)
            {
                this.next = nextNode;
            }

            else
            {
                this.next.AddNext(nextNode);
            }
        }

        public Node GetLastNode()
        {
            if (next == null)
            {

                return this;
            }

            else
            {
                return next.GetLastNode();
            }
        }
    }


        int[] arr = { 4, 1, 6, 28, 3, 10 };

        int max = int.MinValue;
        int min = int.MaxValue;

        public App()
        {
            int result1 = GetMax(0);
            Console.WriteLine(result1); //28
            
            int result2 = GetMin(0);
            Console.WriteLine(result2); //1
        }

        int GetMax(int count)
        {
            if (count == arr.Length)
            {
                return max;
            }

            if (max < arr[count])
            {
                max = arr[count];
            }

            return GetMax(count + 1);
        }

        int GetMin(int count)
        {
            if (count == arr.Length)
            {
                return min;
            }

            if (min > arr[count])
            {
                min = arr[count];
            }

            return GetMin(count + 1);
        }


 

'C# > 수업 내용' 카테고리의 다른 글

[C#] 2021-09-17 역폴란드 표기법  (0) 2021.09.18
[C#] Stack을 Linked List로 구현하기  (0) 2021.09.17
[C#] Linked List (연결리스트), Flowchart (순서도)  (0) 2021.09.15
[C#] 동적 배열  (0) 2021.09.14
[C#] params, out, ref  (0) 2021.09.13