Java 投资返回率复合计算器

标签 java algorithm performance recursion

我一直在尝试制作一个接受以下内容的程序:

  1. 初始值(十亿)
  2. 增长率/年(十亿)
  3. 购买价格(十亿)

然后能够计算出达到投资收支平衡所需的年数。我已经能够使用蛮力算法完成此操作。

我想知道是否有一种方法可以更有效地做到这一点(以一种更类似于标准代数的方式)。

我的代码:

import java.util.Scanner;

public class ReturnOnInvestment {
  public static double initialValue;
  public static double growthRate;
  public static double purchasePrice;

  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    System.out.println("     Return on Investment Calculator     ");
    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    System.out.print(" Starting Value (In Billions): ");
    initialValue = input.nextDouble();
    System.out.print(" Growth Rate (Per Year in Billions): ");
    growthRate = input.nextDouble();
    System.out.print(" Purchase Price (In Billions): ");
    purchasePrice = input.nextDouble();
    input.close();

    System.out.println("-----------------------------------------");
    System.out.println(" ROI Period: " + calculateYears(0) + " Years");
  }

  public static double calculateMoney(double years) {
    if(years < 1) return 0;
    return calculateMoney(years - 1) + initialValue + (growthRate * (years - 1)); 
  }

  public static double calculateYears(double years) {
    if(calculateMoney(years) >= purchasePrice) return Math.round(years * 100) / 100.0;
    return calculateYears(years + 0.01);
  }

}

最佳答案

是的——您可以为此使用对数函数。

根据您的 Java 代码,您可以编写:

public static double yearsNeeded(double initialValue, double growthRate, double purchasePrice) {
    return Math.log(purchasePrice / initialValue) / Math.log(1 + growthRate);
}

举个例子:

public static void main(String[] args) {
    System.out.println("Years to go from 100 to 150 with a growth rate of 5%: "
            + yearsNeeded(100, .05, 150));
}

基本上你要解决“年”:

initialValue * (1 + growthRate) ^ years = purchasePrice

其中 ^ 表示求幂。

您可以将其重写为:

(1 + growthRate) ^ years = purchasePrice / initialValue

变成:

years = [1 + growthRate] log (purchasePrice / initialValue)

其中日志的基数是“1 + growthRate”。而另一个基的log等于任意一个基的log除以该基的log。

关于Java 投资返回率复合计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54818829/

相关文章:

java - 在基于 3d 网格的环境中对电线进行编程的最有效方法是什么?

java - 从 Clojure 中的字符串解析命令行参数

java - Movilizer:我可以自动显示数字键盘并绕过“确定”按钮吗?

java - 如何使用java程序在tomcat网络服务器中创建文件夹?

Java JComboBox 监听更改选择事件

java - 如何在 Java 8 中向 LocalDate 添加天数时跳过周末?

algorithm - 以下递归代码片段的时间和空间复杂度是多少?

Java支持嵌入式多线程

string - 等于后缀的前缀数

javascript - ECMAScript 5 'use strict' 字符串成本存在哪些?