分段故障上的递归函数
segmentation fault on a recursive function
我只是想测试一些东西。我在想我做错了什么?
#include <iostream>
using namespace std;
unsigned long pwr(unsigned long n, unsigned long m)
{
if(m == 0)
n = 1;
if(m == 1)
n = n;
n = pwr(n, m/2) * pwr(n, m/2);
return n;
}
int main ()
{
unsigned long n(2), m(16);
cout << pwr(n, m);
return 0;
}
输出
Segmentation fault
递归没有出口。
你可能需要
if(m == 0)
n = 1;
else if(m == 1)
n = n;
else
n = pwr(n, m/2) * pwr(n, m/2);
return n;
无限递归:无条件地执行递归调用,因此调用堆栈不断增长,直到出现错误停止它。
当您达到基本情况时,您并没有结束递归。即使m == 0
或m == 1
为真,你仍然递归地调用pwr
。这就是无限递归
你除以0:假设m从1开始,在下一次迭代中m = 1/2 = 0,你就会得到错误。你可能想做的是如果m = 0返回1而不是遍历方法
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何在Elixir中调用递归函数并行
- 递归函数有效,但无法记忆
- 为什么我的递归函数按降序打印,然后按升序打印?
- 为什么递归函数的最终输出是 5?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 如何将记忆应用于此递归函数?
- 如何从递归函数中完全返回,该函数给出了每个函数结果的累积相加?
- 无穷大而循环时具有递归函数
- 即使没有调用这个递归函数,它是如何工作的?
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 此递归函数的每次迭代的值存储在哪里?
- 可以清除递归函数中的变量吗?
- 递归函数上的分割故障C
- 递归函数中的分割故障,存储在矢量中
- 在堆栈已满之前,在C/C 中以最大递归函数调用并给出分段故障
- 分段故障中的大规模递归函数
- 分段故障上的递归函数
- 分段故障(堆芯)递归函数
- 分段故障中的递归函数.使用std::stack (c++)