面试中常见递归题目 Java版

来源:互联网 发布:linux下载迅雷资源 编辑:程序博客网 时间:2024/05/16 18:36

package math;


public class RevertANumber {


//用递归调用的方法求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);


    }


}





0 0
原创粉丝点击