java递归

递归的写法不同,效率不同

public class RecursionMain {

  private static long time = 0L;

  public static void main(String[] args) {
    time = System.nanoTime();
    System.out.println(RecursionTest.recursion1(10_000));
    System.out.println((System.nanoTime() - time) / 1000_000);

    time = System.nanoTime();
    System.out.println(RecursionTest.recursion2(1,10_000));
    System.out.println((System.nanoTime() - time) / 1000_000);
  }

  /**
   * 递归的 省时 费时
   */
  private static class RecursionTest {

    /**
     * 使用栈帧方式的阶乘
     * @param n 数
     * @return 值
     */
    static long recursion1(long n) {
      return n == 1 ? 1 : n + recursion1(n - 1);
    }

    /**
     * 阶乘的尾递定义
     * @param acc 值
     * @param n 数
     * @return 值
     */
    static long recursion2(long acc, long n) {
      return n == 1 ? acc : recursion2(acc + n, n - 1);
    }
  }
}

在4核电脑上运行:

结果: 

50005000
3
50005000
0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值