Java 使用递归函数的实例


//用递归调用的方法求n!
public static int fo(int n){

if(n<2){ return 1;
}else{
return n*fo(n-1);
}
}

//用递归法求和1+2+3+4......+n
public static int add(int m){
if(m==1){
return 1;
}else{
return m+add(m-1);
}
}


    /*
     * 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
     * */
    static int find30(int n){
        if (n <= 0)
            return 0;
            else if(n > 0 && n <= 2)
            return 1; 
        return find30(n-1)+find30(n-2);
            
    }
    
    
    /*
     * 将一整数逆序后放入一数组中(要求递归实现) Ex : 1234 变为 {4,3,2,1}
     */


    static int revert(int rs[], int i, int number) {
        if (i < rs.length) {
            rs[i] = number % 10;
            number = (number - number % 10) / 10;
            return revert(rs, i + 1, number);
        } else {
            return 0;
        }


    }


    /*
     * 递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
     */
    static boolean loopWord(String str, int i) {


        if (str.charAt(i) == str.charAt(str.length() - 1 - i)) {
            if (i == (str.length() + 1) / 2)
                return true;
            return loopWord(str, i + 1);
        } else {
            return false;
        }
    }


    /*
     * 分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
     */


    static int dividePrimeToFactors(int num, int factor) {


        while ((factor < num) && (num % factor != 0))
            factor++;
        System.out.print(factor + " ");
        num = num / factor;
        if (factor >= num)
            return factor;// 结束判断
        return dividePrimeToFactors(num, factor + 1);


    }


    public static void main(String[] args) {
       
        System.out.println(find30(30));
        
        int number = 1234;
        int[] rs = new int[(number + "").length()];
        revert(rs, 0, number);
        for (int i = 0; i < rs.length; i++) {
            System.out.print(rs[i]);
        }


        System.out.println(loopWord("1234321", 0));


        dividePrimeToFactors(435234, 2);


    }


}
//养牛23457

public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		//用一个二维数组存放输入的m 和k
		int[][] arr= new int[n][2];
		for(int i=0;i<n;i++) {
			int m = sc.nextInt();
			int k = sc.nextInt();
			arr[i][0] = m;
			arr[i][1] = k;
		}
		solution(arr);
	}
	public static void solution(int[][] arr) {
		ArrayList<Integer> list = new ArrayList();
		for(int i=0;i<arr.length;i++) {
			int m = arr[i][0];
			int k = arr[i][1];
			int res = getSum(m, k);
			list.add(res);
			
		}
		for(Integer i:list) {
			System.out.println(i);
		}
	}
	
	public static int getSum(int m,int k) {
		int i=0;
		if(k<5) {
			return m*(k+1);
		}else {
			return getSum(m,k-1)+getSum(m,k-4);
		}
		
	}

// 递归方法decimalToBinary,把一个十进制数转换成二进制数
	public static void decimalToBinary(int num) {
		if (num == 0) { // 当num=0时,循环结束
			return;
		} else {
			decimalToBinary(num / 2); // 调用递归方法
			System.out.print(num % 2);
		}
	}

//递归方法yueshu,求两个数的最大公约数 ,用两个数的绝对值与这两个数较小的那个一直比较,直到相等为止。
	public static void yueshu(int num1, int num2) {
		if (num1 == num2) {
			System.out.println(num1); // num1=num2时,结束
		} else {
			yueshu(abs(num1 - num2), min(num1, num2)); // 调用递归方法
		}
	}

 // 递归方法hanon,求汉诺塔算法
	public static void hanon(int n, char a, char b, char c) {
		if (n == 1) {
			move(1, a, c);// 最后一种情况是,把A柱子上盘子移到C柱子上。
			return;
		}
		hanon(n - 1, a, c, b); // 递归,把n-1个盘子从A 盘上借助C盘移到B盘上
		move(n, a, c);// 调用move()方法
		hanon(n - 1, b, a, c);// 递归,把把n-1个盘子从B盘上借助A盘移到C盘上
	}
	public static void move(int n, char a, char c) {
		System.out.println(n + ":" + a + "-->" + c);// 打印移动盘子情况
	}


/** 
   * 打印出九九乘法表 
   * @param i 
   */
  public static void m(int i) { 
    if (i == 1) { 
      System.out.println("1*1=1 "); 
    } else { 
      m(i - 1); 
      for (int j = 1; j <= i; j++) { 
        System.out.print(j + "*" + i + "=" + j * i + " "); 
      } 
      System.out.println(); 
    } 
  }  


// 利用递归实现,将输入的一个字符串中的所有元素进行排序并输出
	public static void permute(char[] list, int low, int high) {
		int i;
		if (low == high) {
			String cout = "";
			for (i = 0; i <= high; i++) {
				cout += list[i];
			}
			System.out.println(cout);
		} else {
			for (i = low; i <= high; i++) {
				char temp = list[low];
				list[low] = list[i];
				list[i] = temp;
				permute(list, low + 1, high);
				temp = list[low];
				list[low] = list[i];
				list[i] = temp;
			}
		}
	}


//打印斐波拉契数列前20项
public class FeibolaqiTest {
public int fblq(int n)
{
if(n==1||n==2)
{
return 1;
}else
{
return (fblq(n-1)+fblq(n-2));
}
}
public static void main(String[] args) {
FeibolaqiTest t=new FeibolaqiTest();
//int s=t.fblq(20);
for(int i=1;i<20;i++)
{
int num=t.fblq(i);
System.out.print(num+" ");
}
}

}

发布了40 篇原创文章 · 获赞 6 · 访问量 4799
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章