Java 复习-蓝桥

递归

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);
		}		
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值