java递推_【Java】递归递推的应用

利用阶乘公式来计算组合式:

程序设计思想:

根据公式来计算组合数的大小,从键盘输入n,k的值,设计一个计算阶乘的大小,如果输入的数a为1或0,则直接return 1,否则运用递归,计算a-1的阶乘,直到a为1时,递归结束。

程序流程图:

程序源代码:

public static voidmain(String args[]) {intn ,k,c;

Scanner in=newScanner(System.in);

System.out.print("输入从n个数中选k个数中n,k的值:");

n=in.nextInt();

k=in.nextInt();

System.out.println("结果为:");

c=jiecheng(n)/(jiecheng(k)*jiecheng(n-k));

System.out.println(c);

}

public static int jiecheng(int x)

{

int y=1;

if(x==1||x==0)

y=1;

else y=jiecheng(x-1)*x;

return y;

}

1d9b2e08eca0b2995fbb8835d6a26105.png

根据杨辉三角递推求组合数

程序设计思想:

根据杨辉三角的规律,得出杨辉三角的第n行的第m个的值等于该位置的元素的上一行的左右两个输的和,然后根据杨辉三角与组合数的关系即c(n,m)等于杨辉三角的第n+1的第m+1个元素的值,根据这个来写出组合数的值。

程序流程图:

9870c2259efc0a76543af7ce78fa23fa.png

程序源代码:

public static voidmain(String args[]) {

Scanner sc=newScanner(System.in);

System.out.print("输入N值:");int n=sc.nextInt();

System.out.print("输入K值:");int k=sc.nextInt();int[][] a=new int[n+1][n+1];for(int i=0;i

{for(int j=0;j<=i;j++) {if(j==0||j==i)

{

a[i][j]=1;

System.out.print(a[i][j]+" ");

}else{

a[i][j]=a[i-1][j-1]+a[i-1][j];

System.out.print(a[i][j]);

System.out.print(" ");

}

}

System.out.println();

}if(n<2||k==1)

System.out.println("num=1");else System.out.println("num="+a[n][k-1]+"="+a[n-1][k-2]+"+"+a[n-1][k-1]);

}

55b98ee6969758204ecf0ee50e906f1c.png

运用公式计算组合数:

程序设计思想:

输入n,m,两个数(来组成要求出的组合数)(n>m),如果m=1,则输出结果n,如果m!=1,则进入递归,运用公式,直到进行到n-m=1的时候,结束递归,输出结果。

程序流程图

程序源代码:

public static voidmain(String args[]) {

Scanner sc=newScanner(System.in);

System.out.print("输入N值:");int n=sc.nextInt();

System.out.print("输入K值:");int k=sc.nextInt();

System.out.println("结果为:"+C(n,k));

}public static int C(int n,intk)

{if(n<0||k<0||n

}

1cc777731b10dc10b8cffa9232f94252.png

用Java实现汉诺塔:

程序设计思想:

1.首先输入盘子的数量n,如果盘子的数量是1,则直接将编号为1的圆盘从A移到C,递归结束。

2.否则:

递归,将A上编号为1至n-1的圆盘移到B,C做辅助塔;

直接将编号为n的圆盘从A到C;

递归,将B上的编号为1至n-1的圆盘移到C,A做辅助塔。

程序流程图:

78482b72960d81702cf38297ef28a92f.png

程序源代码:

public static voidmain(String[] args) {

@SuppressWarnings("resource")

Scanner sc=newScanner(System.in);intn;

System.out.println("Please enter the number of your dished(Hanoi Tower):");

n=sc.nextInt();

System.out.println("The number of the times you need to move the dishes is:"+newHanoiTower().hanoiTower(n));

HanoiTower HanoiTower= newHanoiTower();

HanoiTower.move(n,'A', 'B', 'C');

}public int hanoiTower(intn) {if(n==1) return 1;else return hanoiTower(n-1)*2+1;

}public void move(int n, char a, char b, charc) {if (n == 1)

System.out.println("盘 " + n + " 由 " + a + " 移至 " +c);else{

move(n- 1, a, c, b);

System.out.println("盘 " + n + " 由 " + a + " 移至 " +c);

move(n- 1, b, a, c);

}

}

cd49e8668011f7489fd4846fdbe545c5.png

随意输入一个任意大小的字符串,判断他是不是回文字符串。

程序设计思想:

从键盘随意输入一个字符串,并将其赋值给一个数组,然后用递归进行,若i=j,肯定是递归,否则从数组的首元素与尾元素进行比较,若相等,则进行i++与j--,不断向中间靠拢,直到达到判断条件 n>=len/2 ,中间若有一次不符合判断,直接跳出递归,结束进程,输出不是回文字符串。

程序设计流程图:

0457f84dd0ef6d51906bc61bb7126617.png

程序源代码:

public classhuiwen

{private static intlen;private static charp[];public static voidmain(String args[]){

Scanner sc=newScanner(System.in);

String str;

str=sc.nextLine();

len=str.length();

p=str.toCharArray();if(huiwen(0))

System.out.println(str+" is a palindrome!");else System.out.println(str+" is not a palindrome!");

}public static boolean huiwen(intn){if(n>=len/2)return true;if(p[n]==p[len-1-n])return huiwen(n+1);else return false;

}

}

b3a66cc88ccbaf49b0a3ac251bdb00a6.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的排序算法可以使用递归递推两种方式实现。递归是一种自我调用的算法,可以将一个大问题分解成多个小问题,然后逐个解决小问题,最终得到大问题的解。递推则是从已知的初始状态开始,通过不断迭代计算得到最终结果。 在Java中,常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序等。这些算法都可以使用递归递推实现。 以快速排序为例,递归实现代码如下: ``` public static void quickSort(int[] arr, int left, int right) { if (left < right) { int pivot = partition(arr, left, right); quickSort(arr, left, pivot - 1); quickSort(arr, pivot + 1, right); } } private static int partition(int[] arr, int left, int right) { int pivot = arr[left]; while (left < right) { while (left < right && arr[right] >= pivot) { right--; } arr[left] = arr[right]; while (left < right && arr[left] <= pivot) { left++; } arr[right] = arr[left]; } arr[left] = pivot; return left; } ``` 递推实现代码如下: ``` public static void quickSort(int[] arr) { Stack<Integer> stack = new Stack<>(); stack.push(0); stack.push(arr.length - 1); while (!stack.isEmpty()) { int right = stack.pop(); int left = stack.pop(); if (left < right) { int pivot = partition(arr, left, right); stack.push(left); stack.push(pivot - 1); stack.push(pivot + 1); stack.push(right); } } } private static int partition(int[] arr, int left, int right) { int pivot = arr[left]; while (left < right) { while (left < right && arr[right] >= pivot) { right--; } arr[left] = arr[right]; while (left < right && arr[left] <= pivot) { left++; } arr[right] = arr[left]; } arr[left] = pivot; return left; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值