zoukankan      html  css  js  c++  java
  • Java面向对象-递归

    Java面向对象-递归

    递归,就是程序调用自身,我们讲的是方法递归调用,也就是在方法里自己调用自己;

    我们给出一个案例,求阶乘  1*2*3*...*(n-1)*n 

    我们用非递归和递归方式分别实现下,大家可以比较下;

    我们先用非递归方式 大家肯定会想到用循环实现,

    上代码:

     1 package com.java1234.chap03.sec03;
     2  
     3 public class Demo03 {
     4  
     5     /**
     6      * 非递归
     7      * @param n
     8      * @return
     9      */
    10     static long notDiGui(int n){
    11         long result=1;
    12         for(int i=1;i<=n;i++){
    13             result=result*i;
    14         }
    15         return result;
    16     }
    17      
    18      
    19      
    20     public static void main(String[] args) {
    21         System.out.println(Demo03.notDiGui(5));
    22     }
    23 }

    递归的话 我们首先要找到规律 还有必须有一个出口;

    我们来先说说规律 比如求5的阶乘

    我们会发现规律 

    n=5   F(n)=F(n-1)*5  即F(5)=F(4)*5

    n=4   F(n)=F(n-1)*4  即F(4)=F(3)*4

    n=3   F(n)=F(n-1)*3  即F(3)=F(2)*3

    n=2   F(n)=F(n-1)*2  即F(2)=F(1)*2

    n=1   1

    上代码:

     1 package com.java1234.chap03.sec03;
     2  
     3 public class Demo03 {
     4  
     5     /**
     6      * 递归方式
     7      * @param n
     8      * @return
     9      */
    10     static long diGui(int n){
    11         if(n==1){
    12             return 1;
    13         }
    14         return diGui(n-1)*n;
    15     }
    16      
    17      
    18     public static void main(String[] args) {
    19         System.out.println(Demo03.diGui(5));
    20     }
    21 }
  • 相关阅读:
    CSS 选择器之复合选择器
    答辩ppt
    开题报告
    ADS1110/ADS1271
    电感、磁珠和零欧电阻的区别
    ROM、RAM、DRAM、SRAM和FLASH区别
    运放的带宽
    ADC 分辨率和精度的区别
    Verilog
    C语言 文件读取
  • 原文地址:https://www.cnblogs.com/eaglezb/p/5970226.html
Copyright © 2011-2022 走看看