Collatz 시퀀스에서 번호가있는 반복적 인 호출 수를 계산하고 싶습니다. 하지만 더 큰 숫자 예를 들어 4565458458재귀 호출시 분할 오류
#include <cstdlib>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int f(int value){
if(value==1) return 1;
else if(value%2 == 0) return value/2;
else return 3*value+1;
}
int g(int value){
if(value == 0) return 0;
if (f(value)==1) return 1;
return 1 + g(f(value));
}
int main(int argc, char *argv[]){
int nSteps=0;
istringstream iss(argv[1]);
int;
if(!(iss >> num).fail()){
if(num < 0) cout << "0" << endl;
else{
nSteps = g(num);
cout << "Result: " << nSteps << endl;
}
}
else{
cout << "Incorrect line paramaters: ./g n" << endl;
}
return 0;
}
스택 오버플로에 오신 것을 환영합니다! [디버거] (https://en.wikipedia.org/wiki/Debugger)를 사용하여 코드를 단계별로 실행하는 방법을 배워야 할 필요가있는 것 같습니다. 좋은 디버거를 사용하면 한 줄씩 프로그램을 실행하고 예상 한 곳에서 벗어난 곳을 볼 수 있습니다. 프로그래밍을 할 때 필수적인 도구입니다. 추가 읽기 : [작은 프로그램을 디버깅하는 방법] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –
충분히 반복하면 스택 오버플로가 발생할 가능성이 높습니다. – doctorlove
프로그램이 올바르지 않습니다. ': 24 : 17 : 오류 :'num '이 (가)이 범위에서 선언되지 않았습니다.'오류로 인해 컴파일되지 않습니다. –