코드 1 : -C 코드의 차이점은 무엇입니까?
int f(int val) {
int x=0;
while(val > 0) {
x = x + f(val--);
}
return val;
}
코드 2 : -
int g(int val) {
int x = 0;
while(val > 0) {
x= x + g(val-1);
}
return val;
}
코드 f(3)
및 g(3)
의 실행의 차이는 무엇입니까?
Code 1
은 분명합니다. 그런 다음 f(3)
은 계속 더 깊고 깊어지고 반복되는 함수를 추적하는 데 사용되는 공간이 채워지면 스택 오버플로 오류가 발생합니다.
그러나 나는 실제로 두 번째 코드 실행에 집착하고 있습니다. 나는 그것을 달리고 무한 루프를 얻는다.
또한 val--
은 val-1
으로 작성 될 수 있음을 읽었습니다. 그래서, 둘 다 매우 다른 행동을하기 때문에, 라인 val-1
을 해석 할 때 어떻게 잘못 될까요?
'val'의 값이'g'에서 결코 바뀌지 않으므로 무한 루프가 발생합니다. 당신이 전혀 디버깅하지 않았다면 눈치 챘을 것입니다. – StoryTeller
이것은 종이 디버깅이 도움이 될 수있는 좋은 예입니다. 실행중인 각 단계에서 모든 변수의 값을 쓰고 코드가 다음에 수행 할 작업을 결정하십시오. –
'val -'과'val - 1'은 매우 다른 두 가지입니다. 첫 번째 것은 val의 값을 변경하지만 두 번째 값은 변경하지 않습니다. –