迭代求立方根

题目描述:

立方根的逼近迭代方程是 y(n+1) = y(n)*2/3 + x/(3*y(n)*y(n)),其中y0=x.求给定的x经过n次迭代后立方根的值。

 

输入:

输入有多组数据。
每组一行,输入x n。

 

输出:

迭代n次后的立方根,double精度,保留小数点后面六位。

 

样例输入:

4654684 1
65461 23

样例输出:

3103122.666667
40.302088

链接:

http://codeup.cn/problem.php?cid=100000588&pid=10

 

思路:有两种方法,一种是递归,一种是迭代

1.递归

#include<iostream>
#include<iomanip>
using namespace std;
double y(double x,int n){
    double ans;
    if(n==0){
        ans=1.0*x;
        return ans;
    }
    else{
        ans=y(x,n-1)*2/3+x/(3*y(x,n-1)*y(x,n-1));
        return ans;
    }
}

int main(){
    double x;
    int n;
    while(cin>>x>>n){
        cout<<fixed<<setprecision(6)<<y(x,n)<<endl;
    }
    return 0;
}

 

 

2.迭代

#include <stdio.h>
int main(){
    int x, n;
    while(scanf("%d%d", &x, &n) != EOF){
    double sum = x;
    for(int i = 0; i < n; i++)
        sum = sum * 2 / 3 + x / ( 3 * sum * sum);
    printf("%.6f\n", sum);
    }
    return 0;
}

 

posted @ 2020-08-18 11:17  Heinrich♣  阅读(336)  评论(0编辑  收藏  举报