Mantain source value in C ++ recursive function

I am trying to solve the square root in a recursive way. I do not want the code to solve this! I am almost ready, but I do not know how to execute the initial value of the function:

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

I generally want to know how to "save" this first "num" call somewhere to use it ALWAYS in "resta", "num" should always be the number that was set to 1.

NOTES: I cannot enter more input. I can enter only 1 number and error.

+4
source share
3 answers

You can define a global variable at the top of your code.

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);
}
+2
source

. , , .

- , :

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

, . , . , , .

+2

, "" "num", -, "resta", "- num" , 1- .

: . 1 . ++

"" :

1) ( ), . "where" . (origNum) , . ++ , , , "" .

float  raizCuadrada(float num, float err)  // same name as original
{
    origNum = num;             // "save" original 'num'

    return (raizCuadrada2(num, err));  // continue normally
}

2) "" . , , raizCuadrada "2".

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

note - . .

0

Source: https://habr.com/ru/post/1672074/


All Articles