Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 溢出错误_C++ - Fatal编程技术网

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);
 }
}