递归
https://baijiahao.baidu.com/s?id=1595737230572426774&wfr=spider&for=pc
Fibonacci数列
F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
任意输入一个正整数的,输出斐波那契数列正整数对应的值。
import java.util.Scanner;
public class Main {
private static Scanner key;
public static int i=1;
public static void main(String[] args) {
key = new Scanner(System.in);
int n = key.nextInt();
System.out.println(f(n));
}
public static int f(int n) {
if(n==0||n==1) {
return 1;
}else {
return(f(n-1)+f(n-2));
}
}
}
阶乘
汉诺塔
import java.util.Scanner;
public class Main {
private static Scanner key;
public static int i=1;
public static void main(String[] args) {
key = new Scanner(System.in);
int n = key.nextInt();
char a='a',b='b',c='c';
f(n,a,b,c);
}
public static void f(int n,char a,char b,char c) {
if(n==1){
move(1,a,c);
} else{
f(n-1,a,c,b); //将n-1个盘子由a移动到b,以c为辅助柱子(注意参数顺序)
move(n,a,c); //将a上的最后一个盘子移动到c
f(n-1,b,a,c); //将n-1个盘子由b移动到c,以a为辅助柱子
}
}
public static void move(int n,char a,char c) {
System.out.println("第"+i+"步:将"+n+"号盘子从"+a+"移动到"+c);
i++;
}
}
全排列
输入:abc 输出:abc acb bac bca cab cba
import java.util.Scanner;
public class Main {
private static Scanner key;
public static int i=1;
public static void main(String[] args) {
key = new Scanner(System.in);
String s = key.next();
String result = "";
permutation1(s, result, s.length());
}
public static void permutation1(String str ,String result ,int len){
if(result.length()==len){
System.out.println(result);//输出一种情况后,跳回上一次的循环
}
else{
for(int i=0;i<str.length();i++){
if(result.indexOf(str.charAt(i))<0){ //返回指定字符在此字符串中第一次出现处的索引
permutation1(str, result+str.charAt(i), len);
}
}
}
}
}
整数划分
把一个正整数n写成多个大于等于1且小于等于其本身的整数的和,则其中各加数所构成的集合为n的一个划分。
n=4时,有5个划分,即 {4},{3,1},{2,2},{2,1,1},{1,1,1,1}
import java.util.Scanner;
public class Main {
private static Scanner key;
public static int i=1;
public static void main(String[] args) {
key = new Scanner(System.in);
int n = key.nextInt();
int m = key.nextInt();
key.close();
System.out.println(f(n,m));
}
public static int f(int n,int m) {
if(n<1||m<1) {
return 0;
}else if(n==1||m==1) {
return 1;
}else if(n<m) {
return f(n,n);
}else if(n==m) {
return 1+f(n,n-1);
}else {
return f(n,m-1)+f(n-m,m);
}
}
}