zoukankan      html  css  js  c++  java
  • Java零基础—方法递归

    什么是递归:方法自身调用自身即为递归。

    递归很耗费栈内存,能不使用尽量不使用;但有些情况下该功能实现必须依赖递归,例如目录的拷贝。

    递归必须有结束条件,没有结束条件一定会发生栈内存溢出错误;递归即使有了结束条件,即使结束条件正确,也可能会发生栈内存溢出错误。

    不使用递归,计算1~N的和:

     1 /**
     2   不使用递归计算1~N的和。
     3 */
     4 public class RecursionTest01{
     5     public static void main(String[] args){
     6         //计算1~4的和
     7         int n = 4;
     8         int retValue = sum(n);
     9         System.out.println("sum = " + retValue);
    10     }
    11     
    12     public static int sum(int n){
    13         int result = 0;
    14         for(int i = 1; i <= n; i ++){
    15             result += i;
    16         }    
    17             return result;
    18     }
    19 }

    使用递归计算1~N的和:

     1 /**
     2   使用递归计算1~N的和。
     3 */
     4 public class RecursionTest02{
     5     public static void main(String[] args){
     6         //计算1~4的和
     7         int n = 4;
     8         int retValue = sum(n);
     9         System.out.println(retValue);
    10     }
    11     
    12     public static int sum(int n){
    13         if(n == 1){
    14                 return 1;
    15             }
    16         
    17             return n + sum(n-1);
    18     }
    19 }

    使用递归计算1~4时的内存分析

    例:计算N的阶乘。分别使用递归、不使用递归

     1 /**
     2   计算N的阶乘
     3 */
     4 public class RecursionTest03{
     5     public static void main(String[] args){
     6         //计算n的阶乘
     7         int n = 5;
     8         int retValue1 = method1(n);
     9         int retValue2 = method1(n);
    10         System.out.println(retValue1);
    11         System.out.println(retValue2);
    12     }
    13     
    14     //不使用递归计算
    15     public static int method1(int n){
    16         int result = 1;
    17         for(int i = 1; i <= n; i++){
    18             result *= i;
    19         }
    20             return result;
    21     }
    22     
    23     //使用递归计算
    24     public static int method2(int n){
    25             if(n == 1){
    26                     return 1;
    27                 }
    28             return n * method2(n-1);
    29     }
    30 }

    总结:

    世界旋转着我们的生命,一天一天的接近死亡。
  • 相关阅读:
    安卓移动端css3动画卡顿解决方法
    PDO方法实现增删改查
    NPOI 操作笔记
    基于emoji 国际通用表情在web上的输入与显示的记录
    restful 规范
    set与map
    ES6解构赋值
    scss的基本用法
    学习vue的第一二三四五天
    React Hooks --- useState 和 useEffect
  • 原文地址:https://www.cnblogs.com/zhaozhg/p/14438405.html
Copyright © 2011-2022 走看看