关于递归的一些简单应用

public class XxTest {
/**
* 用递归写2017的5次方
*/
static long f(long x, long n) {
        if (n == 0) {
            return 1;
        } else if (n > 0) {
            return x * f(x, n - 1);
        } else{
            return f(x, n + 1) / x;
        }
    }
/**
* 递归文件,找出含.java的文件
*/
public  static void list(File dir){
        File[ ] files=dir.listFiles();
        if(files!=null&&files.length>0){
        for(File file:files){
                if(file.isDirectory()){ //若是子文件夹
                    list(file); //递归
                }else{ //若是普通文件 
                if(file.getName().endsWith(".java")){


                System.out.println(file.getPath());
                }
                }
            }
        }else{
        System.out.println("该文件夹下不存在该类文件!!!");
        }
    }
/**
* 递归文件,找出含.java的文件
*/
public static void Sereach(File f)  
    {  
        if(f.isFile())  {  
            if(f.getName().endsWith(".java"))  {  
            System.out.println(f.getPath());  
                }  
        }  
        if(f.isDirectory())  {  
            File []ss=f.listFiles();  
            for(int i=0;i<ss.length;i++){  
                Sereach(ss[i]);  
            }  
        }  
    } 
/**
* 利用递归实现了Fibonacci数列 
* Fibonacci数列:1,1,2,3,5,8,13……
* 题目:古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
*/
private static int fab(int index) {  
       if (index == 1 || index == 2) {  
           return 1;  
       } else {  
           return fab(index - 1) + fab(index - 2);  
       }  
   }
/**
* 利用递归实现汉诺塔
*/
public static void move(int num, String from2, String mid2, String to2) {  
       if (num == 1) {  
           System.out.println("move disk 1 from " + from2 + " to " + to2);  
       } else {  
           move(num - 1, from2, to2, mid2);  
           System.out.println("move disk " + num + " from " + from2 + " to " + to2);  
           move(num - 1, mid2, from2, to2);  
       }  
   }
/**
* 利用递归实现,将输入的一个字符串中的所有元素进行排序并输出;low,high分别代表起始和结尾数
*/
public static void permute(char[] list, int low, int high) {  
       if (low == high) {//当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可   
           //String cout = "";  
           for (int i = 0; i <= high; i++) {  
               //cout += list[i];  
               System.out.print(list[i]); 
           } 
           //System.out.println(cout);
           System.out.println();  
       } else { //多个字母全排列 
           for (int 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;  
           }  
       }  
   }
/**
* 利用递归实现,求1+2+3...+1000 和
*/
static long sum=0;  
static int a=1;  
public static void sum()  {  
   sum+=a;  
   a++;  
   if(a<=1000)  
   {  
    sum();//调用自身实现递归  
   }  
}
    public static void main(String[] args) {
        //System.out.println(f(2017, 5));
   
        //list(new File("F:/eclipse/"));
        //Sereach(new File("F:/eclipse/"));
   
    /*for(int i=1;i<=20;i++){
    System.out.println("兔子第"+i+"个月的总数为:"+fab(i));
    }*/
   
    //move(5,"sdf","aaa","ccc");
   
    /*char list[]={'a','b','c'};
    permute(list,0,list.length-1);*/
   
      /*sum();  
      System.out.println("计算结果:"+XxTest.sum+"!");*/ 
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值