c++中大数类的递归
c++ recursion in large number class
我正在实现一个大量的库,并且我被一个奇怪的问题卡住了。我有一个乘法的递归实现,但是第一个递归调用甚至没有开始解析。下面是代码的一部分(这是在BigInt类中):
BigInt multiply_utility(BigInt num1, BigInt num2)
{
cout << "Location 1";
if(num1.get_length() == 1)
{
if(num1.get(MAX-1) == 0 || num2.get(MAX-1) == 0)
{
BigInt zero;
return zero;
}
BigInt temp = num2;
for(int i = 1; i < num1.get(MAX-1); i++)
num2 = temp.add(num2);
return num2;
}
else if(num2.get_length() == 1)
{
if(num1.is_zero() || num2.is_zero())
{
BigInt zero;
return zero;
}
BigInt temp = num1;
for(int i = 1; i < num2.get(MAX-1); i++)
num1 = temp.add(num1);
return num1;
}
int m = max(num1.get_length(), num2.get_length());
BigInt low1, low2, high1, high2;
for(int i = MAX-num1.get_length(); i < MAX-(num1.get_length()/2); i++)
low1.set((MAX-((MAX-(num1.get_length()/2))-i)) ,num1.get(i));
low1.auto_set_length();
for(int i = MAX-num2.get_length(); i < MAX-(num2.get_length()/2); i++)
low2.set((MAX-((MAX-(num2.get_length()/2))-i)) ,num2.get(i));
low2.auto_set_length();
for(int i = MAX-(num1.get_length()/2); i < MAX; i++)
high1.set(i,num1.get(i));
high1.auto_set_length();
for(int i = MAX-(num2.get_length()/2); i < MAX; i++)
high2.set(i,num2.get(i));
high2.auto_set_length();
cout << "low1 = " << low1.str() << endl;
cout << "high1 = " << high1.str() << endl;
cout << "low2 = " << low2.str() << endl;
cout << "high2 = " << high2.str() << endl;
BigInt z0,z1,z2;
BigInt handle;
cout << "Location 2";
z0 = multiply_utility(low1,low2);
cout << "Location 3";
z1 = multiply_utility(low1.add(high1),low2.add(high2));
z2 = multiply_utility(high1,high2);
BigInt a;
a = z1.subtract(z2);
a = a.subtract(z0);
return (((z2.shift(m)).add(a.shift(m/2))).add(z0));
/*
return (z2*10^(m))+((z1-z2-z0)*10^(m/2))+(z0)
*/
}
它先打印"location 1",然后再打印"location 2",但是不像递归调用那样再次打印"location 1"。你知道哪里出错了吗?它可能是一个类方法函数吗?
你不能在那里放一个断点来调试它吗?
我怀疑代码在某个时候击中了return
并弹出了这个函数,因此,没有像您期望的那样显示"location…"。
好了,各位,这似乎是一个堆栈溢出。我创建的对象太大,无法全部放入堆栈中,而递归又使堆栈负担过重。谢谢你无论如何!
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- 使用递归时获取变量的奇怪值
- 如何在C++中递归地按相反顺序打印集合
- 到连接组件算法的问题(递归)
- 如何使用递归打印修改后的星号三角形图案
- 使用递归模板动态分配的多维数组
- 递归函数有效,但无法记忆
- 包含模板文件的递归会导致编译失败