七月


私信TA

用户名:yuzefeng

访问量:3813

签 名:

等  级
排  名 1670
经  验 2578
参赛次数 0
文章发表 38
年  龄 0
在职情况 学生
学  校 成都理工大学
专  业

  自我简介:

解题思路:一直循环就好了,注意一下结束条件。开始没看懂迭代公式,还专门去查了一下

注意事项:

因为想使用递归,走了很多弯路,直接while循环的话会简单很多

最开始时候再while中用的递归,使得一直无限循环,因为递归结束后会返回到while中。

删掉了while后,发现结果总会返回第一个值,后来猜想是递归的问题,一层层打开,还要一层层关上,使得最后返回的就是第一个值,所以想到杀死线程

开始想在主函数中输出,但是发现直接杀死线程和return没法联合使用,就变成再自定义函数输出了

再自定义函数中输出时,开始把输出放在了exit之前,发现对于一次性就能找到正确答案的情况无法输出,会直接退出,所以把输出放到了最后



参考代码:

import java.util.Scanner;

import static java.lang.System.exit;

//X[n+1]=(X[n]+a/X[n])/2
public class Main {
   public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       int x = scanner.nextInt();
       double a=x/2;
       sqrt(x,a);
       //System.out.println(String.format("%.3f",sqrt(x,a)));
   }

   static void sqrt(int x,double a ) {
       double b = a;
       a = (a + x / a) / 2;
       //System.out.println(a + " " + b);
       if (Math.abs(a - b) >= 0.00001) {
           sqrt(x, a);
           exit(0);
       }
       System.out.println(String.format("%.3f",a));


   }
}

 

0.0分

0 人评分

  评论区