zoukankan      html  css  js  c++  java
  • 递归的小实例

    1.递归的简介

    程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
     
    递归的三个条件:
    1.边界条件
    2.递归前进段
    3.递归返回段
    当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
    2.递归的实例
     2 /**
     3  * 
     4 * <p>Title: Test2.java</p>  
     5 * <p>Description:递归的练习 </p>   
     6 * <p>Company: 中国农业银行</p>  
     7 * @author 二少爷  
     8 * @date 2018年6月5日
     9  */
    10 public class Test2 {
    11 
    12     /**
    13      * 阶乘
    14      * @param args
    15      */
    16     public static int f(int i){
    17         if (i==0) {
    18             return 1;
    19         }
    20         if (i>=1) {
    21             return i*f(i-1);
    22         }
    23         return f(i);
    24         
    25     }
    26     
    27     /**
    28      * 斐波那契数列
    29      * @param n
    30      * @return
    31      */
    32     public static int j(int n){
    33         if(n==1||n==2){
    34             return 1;
    35         }
    36         if(n>2){
    37             return j(n-1)+j(n-2);
    38         }
    39         return 0;
    40     }
    41     public static void main(String[] args) {
    42         int i = f(6);
    43         System.out.println(i);
    44         
    45         System.out.println("========");
    46         int n = j(7);
    47         System.out.println(n);
    48     }    
    49 }
    结果图

    3.汉诺塔题型

     1 /**
     2  * 
     3 * <p>Title: Test3.java</p>  
     4 * <p>Description: 汉诺塔问题</p>   
     5 * <p>Company: 中国农业银行</p>  
     6 * @author 二少爷  
     7 * 
     8  */
     9 public class Test3 {
    10 
    11     /**
    12      * 移动的总数
    13      * @param x
    14      * @param a
    15      * @param b
    16      * @param c
    17      * @return
    18      */
    19     
    20     static int count  = 1;        
    21     public static void solve(int x,String a,String b,String c){
    22         
    23         if (x==1) {
    24             move(1,a,c);
    25             
    26         }
    27         if (x>=2) {
    28             solve(x-1,a,c,b);
    29             move(x,a,c);
    30             
    31             solve(x-1,b,a,c);
    32             
    33         }
    34         
    35     }
    36     public static void move(int x,String a,String b){
    37         
    38         System.out.print("从"+ a +"移动第"+ x +"个盘子到"+ b);
    39         
    40         System.out.println(",这是第"+ count +"次移动.");
    41         count +=1;
    42         
    43     }
    44     public static void main(String[] args) {
    45         int x=3;
    46         
    47         solve(x,"a","b","c");
    48         
    49     }
    50 }

    结果图

  • 相关阅读:
    寫程序方法
    phpDesigner注冊碼
    如何获取SQL Server数据库元数据(转)
    WPF中的事件(Event)
    访问数据源的架构信息(系统表、信息结构图、GetSchema)
    MSbuild生成WPF程序
    数据契约
    window动态调整大小后无法关闭
    sql server 2000 系统表详细介绍(转,收藏一下)
    Linq2Sql:使用Sqlmetal.exe
  • 原文地址:https://www.cnblogs.com/xaoco/p/9140308.html
Copyright © 2011-2022 走看看