3. For loop. A simple example of using for loops to calculate factorial. Uses the built in int data type so only good to 13!

jk·2024년 1월 10일
0

https://www.cs.utexas.edu/~scottm/cs307/javacode/codeSamples/Factorial.java

public class Factorial
{
	public static void main(String[] args)
	{	final int NUM_FACTS = 100;
		for(int i = 0; i < NUM_FACTS; i++)
			System.out.println( i + "! is " + factorial(i));
	}
	
	public static int factorial(int n)
	{	int result = 1;
		for(int i = 2; i <= n; i++)
			result *= i;
		return result;
	}
}

이것도 따라쳐본다.

public class Factorial {

    public static void main(String[] args) {
        
        final int NUM_FACTS = 100;
        for (int i = 0; i < NUM_FACTS; i++) {
            System.out.println(i + "! is " + factorial(i););
        };
    }
    
    public static int factorial(int n) {
        
        int result = 1;
        for (int 1 = 2; i <= 2; i++) {
            result += i;
        };
        return result;
    }
}

오탈자가 없기를 바라면서 cmd 에서 컴파일을 시도해본다.

아니 왜 i 를 1로 쓰는 이상한 짓을 한거지; 기억해두고 반성한다.

고쳐쓰다가 발견한건데 result 도 곱해야하는데 더했다. 이것도 *= 로 고치자.

public class Factorial {

    public static void main(String[] args) {
        
        final int NUM_FACTS = 100;
        for (int i = 0; i < NUM_FACTS; i++) {
            System.out.println(i + "! is " + factorial(i););
        };
    }
    
    public static int factorial(int n) {
        
        int result = 1;
        for (int i = 2; i <= 2; i++) {
            result *= i;
        };
        return result;
    }
}

자 이번에는 어떨까? 컴파일을 시도해본다.

아니 무슨 이번에는 세미콜론이 이상한 곳에 달려있다. 이걸 고쳐본다.

public class Factorial {

    public static void main(String[] args) {
        
        final int NUM_FACTS = 100;
        for (int i = 0; i < NUM_FACTS; i++) {
            System.out.println(i + "! is " + factorial(i));
        };
    }
    
    public static int factorial(int n) {
        
        int result = 1;
        for (int i = 2; i <= 2; i++) {
            result *= i;
        };
        return result;
    }
}

다시 cmd 로 돌려본다.

컴파일도 됐고 작동도 했는데 결과값이 이상하다. 코드를 대충 훑어보니 n 대신에 2 를 적어서 이상한 값이 나온 걸로 보인다. 그 부분을 고쳐본다.

public class Factorial {

    public static void main(String[] args) {
        
        final int NUM_FACTS = 100;
        for (int i = 0; i < NUM_FACTS; i++) {
            System.out.println(i + "! is " + factorial(i));
        };
    }
    
    public static int factorial(int n) {
        
        int result = 1;
        for (int i = 2; i <= n; i++) {
            result *= i;
        };
        return result;
    }
}

드디어 잘 작동하는 것 같다. 하지만 눈에 띄는 점들이 있는데 이 cmd 를 아래로 내려보면,

26번 이후로 값이 0 으로 나온다. 사실 그것뿐만이 아니라 양수랑 음수를 오락가락하기도 한다.

하지만 초기값 자체는 잘 나오는 걸 보니 이건 java int 에서의 오버플로와 관련이 있는 것 같다. 0이 나오는 건 너무 커서 연산 자체가 안 되는 걸까? 잘 모르겠다.

내용 자체에 대한 이해는 문제 없었다. 하지만 이런저런 미스가 많았다. 좀 더 집중하면서 타이핑을 해야겠다. 베끼는 동시에 이해가 제대로 됐다면 이런 문제가 줄어들었을 것 같다.

사람들이 왜 ide 를 쓰는지 알 것 같다는 감상이다.

profile
Brave but clumsy

0개의 댓글

관련 채용 정보