java用递归求回文数_递推递归组合数,汉诺塔,回文数问题(java)

递推递归组合数:

1思路:用函数求得n!,调用函数计算结果流程图

2 .1流程图

79919f41288da1cab57029d856e59813.png

3 .1源代码:

import java.util.Scanner;

public class N {

public static void main(String [] args){

int n,k;

int S;

System.out.println("请输入C(n,k)中n和k的值:");

Scanner num = new Scanner(System.in);

n=num.nextInt();

k=num.nextInt();

S=fun(n)/(fun(k)*fun(n-k));

System.out.println("C("+n+k+")结果是:"+S);

}

static int fun(int a)

{

int m=1;

for (int b=1;b

m=m*(b+1);

}

return m;

}

}

4.1 结果

840c361163f489e3b9d31adea8eba7ef.png

2.2 流程图

9b7ae1dec2bb46e1af56a3a0cc89d48c.png

3.2 源代码:

import java.util.Scanner;

public class Fact {

static int fun(int a){

if(a==0||a==1){

return a;

}

else {

return a*fun(a-1);

}

}

public static void main(String[]args){

int n,k;

System.out.println("请输入n和k");

Scanner num = new Scanner(System.in);

n=num.nextInt();

k=num.nextInt();

int C;

C=fun(n)/(fun(k)*fun(n-k));

System.out.println("result:"+C);

}

}

4.2 结果:

2140b8c6ce6aab7a2f546e6d0a1131c4.png

2.3 流程图:

10e838a4151465bcb0a731cf37220550.png

3.3 源代码:

import java.util.Scanner;

public class Yanghui {

public static void main(String []args){

int n = 0,k;

int b[][];

System.out.println("请输入n的值:");

Scanner num = new Scanner(System.in);

n=num.nextInt();

k=num.nextInt();

b = new int[n][];

for (int i=1;i<=n;i++){

b[i-1] = new int[i];

}

for(int j=0;j

for(int z=0;z<=j;z++){

if(j==0||z==0||z==j){

b[j][z]=1;

continue;

}

else{

b[j][z] = b[j-1][z-1]+b[j-1][z];

}

}

}

for(int x=0;x

for(int y=0;y<=x;y++){

System.out.print(b[x][y]+" ");

}

System.out.println(" ");

}

int S;

S=b[n-1][k-2]+b[n-1][k-1];

System.out.println("和是:"+S);

}

}

4.3 结果:

b7238cf2fc97733d3d74f0498ce41892.png

汉诺塔:(百度的)

流程图:

3016a28d6cc7c2827f7fab1f42c91e52.png

源代码:

import java.util.Scanner;

public class Hannuota {

public static void main(String[] args)

{

Hannuota h=new Hannuota();

h.go();

}

public void go()

{

System.out.println("请输入盘子的个数n:");

@SuppressWarnings("resource")

Scanner scanner=new Scanner(System.in);

int n=scanner.nextInt();

if(n>=0)//判断n是否符合要求

{

System.out.println("移动"+n+"个盘子的步骤为:");

hanoi(n,'A','B','C');

}

else System.out.println("输入的数不符合要求");

}

public void hanoi(int m,char one,char two,char three)

{

if(m==1)

move(one,three);

else

{

hanoi(m-1,one,three,two);//第一步将A上n-1个盘子借助C移到B上

move(one,three);//第二步将A上一个盘子移到C上

hanoi(m-1,two,one,three);//第三步将B上n-1个盘子借助A移到C上

}

}

public void move(char x,char y)

{

System.out.println(x+"->"+y);

}

}

3结果:

5a16551390b631a27c6470743bd4c944.png

回文:

1 设计思想:

定义字符串,获取长度,利用递归函数判断两头是否相等。

2 流程图:

29e8a8577963a2cb38ecd93d65173285.png

3源代码:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class Huiwen {

public static void main(String[] args)

{

Huiwen h=new Huiwen();

try {

h.go();

} catch (IOException e) {

e.printStackTrace();

}

}

public void go() throws IOException

{

String input=null;

System.out.println("输入字符串:");

BufferedReader is=new BufferedReader(new InputStreamReader(System.in));

input=is.readLine();

if(!input.isEmpty())

{

int [] array=new int[input.length()];

for(int i=0;i

{

array[i]=input.charAt(i);

}

System.out.println("是回文数?"+ifHuiWen(array,0));

}

else System.out.println("输入的数不符合要求");

}

public boolean ifHuiWen(int[] a,int l)

{

if(l==a.length/2)

return true;

if(a[l]==a[a.length-l-1])

return ifHuiWen(a,l+1);

else return false;

}

}

4结果:

b64a499f21d2f8ef7fbdcbb0251a187a.png

dd9fa84024286498f08128eac07f63bc.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值