求N的阶乘
//递:3*fac(2)-->2*fac(1)-->1 归:1-->fac(1)*2-->fac(2)*3-->找到结果
public static int fac(int n){
if (n == 1) {
return 1;
}
int tmp=n*fac(n-1);//fac调用函数自身
return tmp;
}
public static void main(String[] args) {
System.out.println(fac(3));
}
求1+2+3+...+n
public static int sum(int n){
if (n==1){
return 1;
}else {
return n+sum(n-1);
}
}
public static void main(String[] args) {
System.out.println(sum(10));
}
按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
//n=1234 func(1234/10)(!<=9)-->func(123/10)-->func(12/10)-->得到func(1)-->小于9return 12%10=2-->123%10=3-->1234%10=4
//注意:若没有return那么就没有结束条件-->会一直在栈上开辟内存-->栈溢出
public static void func(int n){
if(n<=9){
System.out.println(n);
return;
}
func(n/10);
System.out.println(n%10);
}
public static void main(String[] args) {
func(1234);
}
求斐波那契数列的第n项
//采用递归实现会出现大量重复计数 更推荐循环实现
public static int fib(int n){
if(n==1||n==2){
return 1;
}
return fib(n-1)+fib(n-2);
}
public static void main(String[] args) {
System.out.println(fib(5));
}
汉诺塔问题
//假设有三个柱子p1,p2,p3
// 起初有n个盘子在p1 总体来看就是先将n-1个盘子从p1借助p3移动到p2 再将p2的n-1个盘子借助p1移动到p3
public static void han(int n,char p1,char p2,char p3){
if (n == 1) {
move(p1, p3);
return;
}
han(n-1,p1,p3,p2);
move(p1,p3);
han(n-1,p2,p1,p3);
}
public static void move(char p1,char p2){
System.out.println(p1+"->"+p2);
}
public static void maina(String[] args) {
han(1,'a','b','c');//假设有1个盘子,应如何挪动
han(3,'A','B','C');//假设有3个盘子,应如何挪动
}
青蛙跳台阶
//青蛙跳台阶一次跳一个或两个...或n个 跳1-->剩n-1 2-->n-2 ... n-1-->1 n-->0
//由此可知
//f(n)=f(n-1)+f(n-2)+f(n-3)+...+f(1)+f(0)
//f(n-1)=f(n-2)+f(n-3)+...+f(1)+f(0)
//因此可求出
//f(n)-f(n-1)=f(n-1) ----> f(n)=2*f(n-1)
public static int jump(int n){
if (n == 1) {
return 1;
}if (n == 2) {
return 2;
}
int tmp = 2*jump(n-1);
return tmp;
}
public static void main(String[] args) {
System.out.println(jump(5));//假设台阶数为5应有多少种跳法
}