sqrt函数的伪代码

use*_*675 2 c++ c++11

我设法让我的sqrt函数运行得很好,但我猜第二次猜测是否根据我给出的伪代码正确编写了这段代码.

这是伪代码:

x = 1
repeat 10 times:  x = (x + n / x) / 2
return x.
Run Code Online (Sandbox Code Playgroud)

我写的代码,

#include <iostream> 
#include <math.h> 
using namespace std; 

double my_sqrt_1(double n) 
{
double x= 1; x<10; ++x;
return (x+n/x)/2; 
} 
Run Code Online (Sandbox Code Playgroud)

Nem*_*ric 7

不,您的代码不遵循您的伪代码.例如,您不会在代码中重复任何内容.你需要添加一个循环来做到这一点:

#include <iostream> 
#include <math.h> 
using namespace std; 

double my_sqrt_1(double n) 
{
  double x = 1;
  for(int i = 0; i < 10; ++i) // repeat 10 times
    x = (x+n/x)/2;
  return x; 
} 
Run Code Online (Sandbox Code Playgroud)

让我们分析你的代码:

double x = 1;
// Ok, x set to 1


x < 10; 
// This is true, as 1 is less than 10, but it is not used anywhere

++x;
// Increment x - now x == 2

return (x + n / x) / 2 
// return value is always (2 + n / 2) / 2
Run Code Online (Sandbox Code Playgroud)

由于您没有任何循环,因此函数将始终在返回值的第一个"迭代"中退出(2 + n / 2) / 2.