인자도 int 3개만 쓰고 내부에서 변수 정의도 2개밖에 안했는데 재귀 10^6번 들어간 거랑 거의 안들어간거랑 메모리 차이가 60MB차이가 나네
그럼 함수 1개당 60바이트씩 먹는 거니까 연산 중에 상수 생기는거 제외해도 함수 한번 호출할 때마다 30바이트는 쓴다는 건가..?
혹시나 해서 코드도 적어놓음
int f(int h, int r1, int r2) { if(h == m) return 0; short k = 8 * (r1 > 4 ? r1 - 3 : r1) + r2; if(dp[h][k] != -1) return dp[h][k] + (r1 > 4); int ans = 0; ans = max(ans, r1 / 3 + f(h + 1, r2, cnt[h + 2])); if(r1 >= 1 && r2 >= 1 && cnt[h + 2] >= 1) ans = max(ans, 1 + (r1 - 1) / 3 + f(h + 1, r2 - 1, cnt[h + 2] - 1)); if(r1 >= 2 && r2 >= 2 && cnt[h + 2] >= 2) ans = max(ans, 2 + (r1 - 2) / 3 + f(h + 1, r2 - 2, cnt[h + 2] - 2)); dp[h][k] = ans - (r1 > 4); return ans; }
스택 프레임이랑 지역변수, 그리고 64비트면 섀도우스페이스 같은 것 때문에 더 늘어남
어셈블리 생성된거 보면 얼마 쓰는지는 알 수 있을듯