Java求经典算法自由落体以及优化拓展

白色玫瑰 程序猿

时间: 2023-05-22 阅读: 1 字数:2978

{}
/* 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下, 求它在第10次落地时,共经过多少米?第10次反弹多高 这里用BigDecimal避免精度丢失 */ public class FreeFallingBody { ...

目录

/*
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,
求它在第10次落地时,共经过多少米?第10次反弹多高
这里用BigDecimal避免精度丢失
*/
public class FreeFallingBody {

   public void tradition(){
      //传统算法 循环10次计算这里用BigDecimal避免精度丢失
      BigDecimal distance = new BigDecimal(100.0);
      BigDecimal height = new BigDecimal(100.0);
      BigDecimal result = null;
      BigDecimal percentage = new BigDecimal(2.0);
      for (int i = 0; i <10 ; i++) {
         height = height.divide(percentage);
         if (result == null) result = distance.add(height);
         else result = result.add(height);
         //System.out.println("distance" + result);
      }
      System.out.println( result);
   }

   /**
    * 这里用BigDecimal避免精度丢失
    * 以1为次数起点正向递归求第n次后自由落体后小球运动了多少距离
    * 自定义求第n次后自由落体后小球运动了多少距离
    * 以及逆向求第k次前的第n次之间自由落体后小球运动了多少距离
    * 递归逆向求运动距离时候distance第一次运动距离为 0
    * */
   public BigDecimal diyFreeFallingBody(int fallingTimes,int thisTimes,BigDecimal height,BigDecimal percentageHeight,BigDecimal distance  ){
      /**所求落体次数相同则直接返回高度*/
      if (thisTimes == fallingTimes) return distance.add(height.divide(percentageHeight));
      else if (thisTimes < fallingTimes){
         /**反复正向递归求下一次自由落体高度*/
         if (thisTimes == 1) distance = height;
         BigDecimal nextHeight = height.divide(percentageHeight);
         return diyFreeFallingBody(fallingTimes,thisTimes+1,nextHeight,percentageHeight,distance.add(nextHeight));
      }else if (thisTimes>fallingTimes+1){
         /**反复逆向递归求下一次自由落体高度*/
         BigDecimal lastHeight = height.multiply(percentageHeight);
         if (distance.intValue()==0) distance = height;
         System.out.println("distance" + distance);
         return diyFreeFallingBody(fallingTimes,thisTimes-1,
               lastHeight,percentageHeight,distance.add(lastHeight));
      }else if (thisTimes ==fallingTimes+1){
         return distance.add(height.multiply(percentageHeight));
      }
      return new BigDecimal(0);
   }
}

原文地址:https://blog.csdn.net/qq_29856589/article/details/80085115?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168475001216800227455128%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168475001216800227455128&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-12-80085115-null-null.142^v87^insert_down1,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96

本文章网址:https://www.sjxi.cn/detil/d8107b6a13614d88bc82a9a86ac0fed3

打赏作者

本站为非盈利网站,如果您喜欢这篇文章,欢迎支持我们继续运营!

最新评论
当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号

×

(穷逼博主)在线接单

QQ: 1164453243

邮箱: abcdsjx@126.com

前端项目代做
前后端分离
Python 爬虫脚本
Java 后台开发
各种脚本编写
服务器搭建
个人博客搭建
Web 应用开发
Chrome 插件编写
Bug 修复