用递归的方式实现开平方(C++)
以前写过一篇用python代码去实现开平方根的文章,最近在学习C++,在这里再把同样的原理用C++代码实现一下。开平方的原理不再重复,有兴趣的朋友可以翻一翻我以前的文章。
#include<iostream>
using namespace std;
// 用二分法找到完全平方数
int get_a (int num) {
int left = 0, right = num;
// C++中同为整型的数值进行算术运算,其结果只保留整数部分
int middle = 0;
while (left <= right) {
middle = (left + right) / 2;
if (middle * middle <= num && (middle + 1) * (middle + 1) > num) {
return middle;
}
else if (middle * middle > num) {
right = middle - 1;
}
else if (midde * middle < num) {
left = middle + 1;
}
}
}
// 递归相除,设置默认递归次数为5
double extract(int a, int b, int k = 5) {
if (b == 0) {
return (double)a;
}
if (k == 0) {
double the_root = a + b / a;
return the_root;
}
else {
return a + b / (a + exctract(a, b, k-1))
}
}
// 主函数调用
int main(){
int input = 0;
cout << "请输入一个正整数" << endl;
cin >> input;
int a = get_a(input);
int b = input - a * a;
cout << "这个数的平方根是" << extract(a, b) << endl;
system("pause");
return 0;
}
/*
仅从输出的结果来看,似乎没有python输出的结果精确
这是因为C++中无论是float类型还是double类型小数,最终展示出来的都只有6位有效数字
*/