递归经典案例,三角数字的多种实现方式

2014-11-24 10:21:31 · 作者: · 浏览: 0

首先大家应该知道什么是三角数字,三角数字的定义就是:

滴n个三角数字是 由 1+。。。+n所得。

例如:

1 的三角数字是1

2的三角数字是 1+2 =3

3的三角数字是 1 + 2 + 3 = 6

。。。。。

显然此处如果要写算法可以采用递归:

当然,实现的方法也不仅仅是递归

(1)while循环实现的方式


public int getTriangleNumber(int n) 
    { 
        int totle = 0; 
        while(n>0)//从1 开始  
        { 
            totle = totle+(n--); 
        } 
         
        return totle; 
    } 

public int getTriangleNumber(int n)
 {
  int totle = 0;
  while(n>0)//从1 开始
  {
   totle = totle+(n--);
  }
  
  return totle;
 }

(2)for循环方式实现


public int getTriangleNumberByFor(int n) 
    { 
        int totle = 0; 
 
        for(;n> 0; ) 
        { 
            totle = totle+n; 
        } 
        return totle; 
    } 

public int getTriangleNumberByFor(int n)
 {
  int totle = 0;

  for(;n> 0; )
  {
   totle = totle+n;
  }
  return totle;
 }

(3)数学公式方式实现

三角数字的数序公式是: (n*n + n)/2

所以方法也就是:



public int getTriangleNumberByMath(int n) 
    { 
        return (n*n + n)/2; 
    } 

public int getTriangleNumberByMath(int n)
 {
  return (n*n + n)/2;
 }

(4)递归方式实现


public int getTriangleT(int n) 
    { 
        int totle = 0; 
        if(n == 1 ) 
        { 
//          递归的理解,此处为什么可以直接return1 呢?  
            /**
             * 递归,类似一个栈
             * 之前 n = 3 n =2 
             * 过程:
             * (1) n =3  3+fun(2)
             * (2) n=2   2+fun(1)
             * (3) n=1   将1 返回到(2)
             * 此时返回
             * (4)n=2 2+1 将 2+1 = 3 返回到(1)
             * (5)此时 n = 3 , n+f(2) , f(2)返回了3
             * 所以 n=3 , 3=3
             * 返回6
             */ 
            return 1;//退出递归··的条件,基值 情况(base case)  
        } 
        return totle = n+getTriangleT(n-1); 
    } 

public int getTriangleT(int n)
 {
  int totle = 0;
  if(n == 1 )
  {
//   递归的理解,此处为什么可以直接return1 呢?
   /**
    * 递归,类似一个栈
    * 之前 n = 3 n =2
    * 过程:
    * (1) n =3  3+fun(2)
    * (2) n=2   2+fun(1)
    * (3) n=1  将1 返回到(2)
    * 此时返回
    * (4)n=2 2+1 将 2+1 = 3 返回到(1)
    * (5)此时 n = 3 , n+f(2) , f(2)返回了3
    * 所以 n=3 , 3=3
    * 返回6
    */
   return 1;//退出递归··的条件,基值 情况(base case)
  }
  return totle = n+getTriangleT(n-1);

}这个例子很适合初学者理解递归的概念,大家有什么疑问可以给我留言。