1.阶乘
嗯,这个就是 高中还是初中学的,比如4的阶乘 4!=1x2x3x4 ,那么也就是说自己调用自己的方法,一直乘n-1一直到n=2为止。
//1.阶层
public class factorial{
public static int def(int n){
if(n>0){
if(n==1){
return n;
}else{
return def(n-1)*n;
}
}
}
public static void main (String [] args){
def(10)
}
}
2.fibonacii
a1=1,a2=1,a3=2,a4=3...也就是说an = a(n-1) +a(n-2), 输入n(数字的位置),要知道这个数字是多少,同理。用方法,只有第一位和第二位返回1其余都返回f(n-1)+f(n-2)即可。
然后f(n-1)再调用递归方法成为f(n-2)+f(n-3),直到f里的参数为1或者2停止,全部展开之后就成为多个f(1)和f(2)的和。
public class fibonacii{
public static void main(String []args){
fib(20)
}
public static int fib(int n){
if(n==1 || n==2){
return 1;
}else{
return fib(n-1)+fib(n-2);
}
}
}
3.递归访问所有文件
嗯 如题
public class RecursiveFileDemo {
public static void main(String[] args) {
getFile(new File("D://一堆奇怪的东西"));
}
public static void getFile(File file) {
File[] filelist = file.listFiles();
for (int i = 0; i < filelist.length; i++) {
if (filelist[i].isDirectory()) {
getFile(filelist[i]);
} else {
System.out.println(filelist[i].getPath());
}
}
}
}
4、排列组合的两种递归方式,参考蓝桥杯教程
package com.suanfa;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;
public class Pailiezuhe {
// 思路:穷举每个字符都在整个串或者递归都串排第一个
public static List f1(String str){
List<String> list = new Vector();
if(str.length() ==1){
list.add(str);
return list;
}
for(int i=0;i<str.length();i++){
char ch = str.charAt(i);
List t = f1(str.substring(0,i)+str.substring(i+1));
for (int k=0;k<t.size();k++){
list.add(""+ch+t.get(k));
}
}
return list;
}
/**
* 每个字符都与后面所有字符交换位置
* @param aa 待排数据
* @param k 当前位置
*/
public static void f2(char[] aa,int k){
if(k==aa.length-1){
System.out.println(String.valueOf(aa));
return;
}
for(int i=k;i<aa.length;i++){
{
char t = aa[k];
aa[k] = aa[i];
aa[i] = t;
}
f2(aa,k+1);
{
char t= aa[k];
aa[k] = aa[i];
aa[i] = t;
}
}
}
public static void main(String[] args) {
List l = f1("ABC");
System.out.println(Arrays.toString(l.toArray()));
char[] aa = {'A','B','C'};
f2(aa,0);
}
}