C++ 溢出错误
我想练习递归。这是我的密码C++ 溢出错误,c++,C++,我想练习递归。这是我的密码 long int factorial(int *fact); /*.. ..*/ case '6': int fact; std::cin >> fact; std::cout << factorial(&fact); break; /*... ...*/ long int factorial(int *fact) { if (*fact == 0) return
long int factorial(int *fact);
/*..
..*/
case '6':
int fact;
std::cin >> fact;
std::cout << factorial(&fact);
break;
/*...
...*/
long int factorial(int *fact) {
if (*fact == 0)
return 1;
else
return *fact * factorial(fact - 1);
}
怎么了?首先,不要将指针传递给递归函数。但是,如果您坚持使用指针,则可能会将您的函数修改为:
long int factorial(int *fact)
{
if (*fact == 0)
return 1;
else
{
(*fact)--;
return (*fact+1) * factorial(fact);
}
}
这在很大程度上取决于你对事实的看法。对于较大的数字,堆栈很可能会很快耗尽。为什么要传递int*而不是普通的int?事实-1是内存地址sizeofint bytes早于事实,这不是您想要的。您应该将原型和函数更改为使用int而不是int*@falauthy一次只做一件事。@falauthy如果要更改输入变量,请使用引用。如果你想练习指针,做一些需要的事情,比如写你自己的字符串或向量。学习指针的一部分是学习何时使用和何时不使用。
long int factorial(int *fact)
{
if (*fact == 0)
return 1;
else
{
(*fact)--;
return (*fact+1) * factorial(fact);
}
}