C++ 在递归函数c++;
我试图用递归的方法求平方根。我不想让代码解决这个问题!我几乎完成了,但我不知道如何保持函数的原始值:C++ 在递归函数c++;,c++,recursion,C++,Recursion,我试图用递归的方法求平方根。我不想让代码解决这个问题!我几乎完成了,但我不知道如何保持函数的原始值: float raizCuadrada(float num, float err) { float nuevo = num / 2; float resta=(nuevo*nuevo)-num; if(resta>err){ return (raizCuadrada(nuevo, err)); } else if (resta &
float raizCuadrada(float num, float err) {
float nuevo = num / 2;
float resta=(nuevo*nuevo)-num;
if(resta>err){
return (raizCuadrada(nuevo, err));
}
else if (resta <= err) {
return (nuevo);
}
}
float raizCuadrada(float num,float err){
浮点数=num/2;
float resta=(新潮*新潮)-num;
如果(重启>错误){
返回(raizCuadrada(新奥尔良));
}
else if(resta您可以在代码顶部定义一个全局变量
float num_fixed;
float raizCuadrada(float num, float err) {
float nuevo = num / 2;
float resta=(nuevo*nuevo)-num_fixed;
if(resta>err){
return (raizCuadrada(nuevo, err));
}
else {
return (nuevo);
}
}
int main(void){
float num = 2.0;
float err = 0.000001;
float output;
num_fixed = num;
output = raizCuadrada(num, err);
}
我推荐已经提出的两种解决方案,要么重载一个包含三个参数的函数,要么使用全局变量
如果你出于某种原因不想这样做,你可以使用一些诡计:
float raizCuadrada(float num, float err) {
static float org = -1;
if(org<0)
org = num;
float nuevo = num / 2;
float resta=(nuevo*nuevo)-org;
float ret;
if(resta>err)
ret = raizCuadrada(nuevo, err);
else
ret = nuevo;
if(org>=0)
org=-1;
return ret;
}
float raizCuadrada(float num,float err){
静态浮动组织=-1;
如果(或错误)
ret=raizCuadrada(新奥尔良);
其他的
ret=新意;
如果(组织>=0)
org=-1;
返回ret;
}
除非你真的有特殊需要,否则我不会推荐这种方法。它很容易出错,我想不出有什么真正的好处。但既然它是可能的,我想展示它
我基本上想知道如何“保存”第一个“num”呼叫,
要始终在“resta”中使用它,“-num”应始终为
第一把的号码
注意:我不能输入更多的输入。我只能输入1个数字和
错误c++
我最常使用的解决方案是将这两种“努力”分为两种方法:
1) 从一个方法开始(使用您原来的方法名)将第一个变量保存到一个安全的空间。我将把“where”留给您。在这里,我只是编了一个新的变量名(origNum)在每个方法的代码中都有一个可用的范围。在C++中,我希望包含这些方法的类将“保存”并使用实例数据属性。
float raizCuadrada(float num, float err) // same name as original
{
origNum = num; // "save" original 'num'
return (raizCuadrada2(num, err)); // continue normally
}
2) 然后,对您以前的代码进行一次轻微的重新计算,使用“saved”值。由于您无法更改参数,我建议稍微更改方法名称,在这里我创建了带有后缀“2”的raizCuadrada
float raizCuadrada2(float num, float err) {
float nuevo = num / 2;
float resta=(nuevo*nuevo)-origNum; // use origNum here
if(resta>err){
return (raizCuadrada(nuevo, err));
}
else if (resta <= err) {
return (nuevo);
}
}
float raizCuadrada2(float num,float err){
浮点数=num/2;
float resta=(nuevo*nuevo)-origNum;//在这里使用origNum
如果(重启>错误){
返回(raizCuadrada(新奥尔良));
}
否则如果(resta创建一个包含3个参数的重载。最后一个参数是原始的num。包含2个参数的函数只调用包含3个参数的函数,包含3个参数的函数完成所有工作。你确定这个算法吗?我无法让它工作。“num_fixed”需要在使用之前进行初始化。是的,这将在main中完成函数,并设置为初始值。我已经更新了我的答案,显示了一个基本的main函数。我也用另一个替换了其他的。在代码中,<代码> C++ >代码>标签>代码> MalOC/,给了你一个下限的投票。我会投票,但是我认为有一些事情需要修复。org将在多个递归级别上被释放。@miliesmith我可以看到,当我尝试此操作时,它将被释放多次,但我无法理解如何被释放。你能解释一下吗?我修复了malloc->new和初始化。我现在完全删除了动态内存。当resta>err时,算法将被递归多次。它是f因为你从未将其设置为nullptr,所以rees在每一个方面都进行了组织。更改看起来不错。我稍后有时间会仔细查看。