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

程序设计思想:

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

程序流程图:

程序源代码:

public static void main(String args[]) {
int n ,k,c;
Scanner in=new Scanner(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;
}

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

程序设计思想:

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

程序流程图:

程序源代码:

    public static void main(String args[]) {
Scanner sc=new Scanner(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<n+1;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]);
}

运用公式计算组合数:

程序设计思想:

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

程序流程图

程序源代码:

    public static void main(String args[]) {
Scanner sc=new Scanner(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,int k)
{
if(n<0||k<0||n<k)
return 0;
if(n==k)
return 1;
if(k==1)
return n;
return C(n-1,k)+C(n-1,k-1);
}

用Java实现汉诺塔:

程序设计思想:

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

2.否则:

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

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

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

程序流程图:

程序源代码:

    public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner sc=new Scanner(System.in);
int n;
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:"+new HanoiTower().hanoiTower(n));
HanoiTower HanoiTower = new HanoiTower();
HanoiTower.move(n, 'A', 'B', 'C'); } public int hanoiTower(int n) {
if(n==1) return 1;
else return hanoiTower(n-1)*2+1;
} public void move(int n, char a, char b, char c) {
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);
}
}

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

程序设计思想:

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

程序设计流程图:

程序源代码:

public class huiwen
{
private static int len;
private static char p[]; public static void main(String args[]){
Scanner sc=new Scanner(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(int n){
if(n>=len/2)
return true;
if(p[n]==p[len-1-n])
return huiwen(n+1);
else return false;
}
}

【Java】递归递推的应用的更多相关文章

  1. 蓝桥杯—BASIC-21 sine之舞(递归递推)

    题目:最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数,所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力. 不妨设 An=sin(1– ...

  2. 再谈循环&迭代&回溯&递归&递推这些基本概念

    循环:不断重复进行某一运算.操作. 迭代:不断对前一旧值运算得到新值直到达到精度.一般用于得到近似目标值,反复循环同一运算式(函数),并且总是把前一 次运算结果反代会运算式进行下一次运算 递推:从初值 ...

  3. 第二场周赛(递归递推个人Rank赛)——题解

    很高兴给大家出题,本次难度低于上一场,新生的六个题都可以直接裸递归式或者裸递推式解决,对于老生的汉诺塔3,需要找出一般式,后两题分别为裸ST算法(或线段树)/线性DP. 正确的难度顺序为 种花 角谷定 ...

  4. codeforce 227D Naughty Stone Piles (贪心+递归+递推)

    Description There are n piles of stones of sizes a1, a2, -, an lying on the table in front of you. D ...

  5. 蓝桥杯—ALGO-12 幂方分解(递归递推)

    问题描述 任何一个正整数都可以用2的幂次方表示.例如: 137=27+23+20 同时约定方次用括号来表示,即ab 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步 ...

  6. UVa 10328 Coin Toss(Java大数+递推)

    https://vjudge.net/problem/UVA-10328 题意: 有H和T两个字符,现在要排成n位的字符串,求至少有k个字符连续的方案数. 思路:这道题目和ZOJ3747是差不多的,具 ...

  7. java算法面试题:递归算法题2 第1个人10,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大?

    package com.swift; public class Digui_Return { public static void main(String[] args) { /* * 递归算法题2 ...

  8. UVA10862 - Connect the Cable Wires(递推 + java的大数)

    UVA10862 - Connect the Cable Wires(递推 + java的大数) 题目链接 题目大意:给你n座房子位于一条直线上,然后仅仅给你一个cable service.要求每座房 ...

  9. 从一道NOI练习题说递推和递归

    一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...

随机推荐

  1. spring Bean的完整生命周期

    spring 容器中的bean的完整生命周期一共分为十一步完成. 1.bean对象的实例化 2.封装属性,也就是设置properties中的属性值 3.如果bean实现了BeanNameAware,则 ...

  2. Codeforces 1101G(线性基)

    题目链接 题意 将序列尽可能分成多段使得任意$x \geq 1$段内的所有元素的异或和大于$0$问最多多少段 思路 首先,如果所有元素异或和等于$0$答案显然为$-1$,否则构造整个序列的线性基,这个 ...

  3. auto类型说明符

    auto让编译器通过出初始值来推算变量的类型,显然,auto定义的变量必须有初始值: //由val1和val2相加的结果可以推断出item的类型 auto item = val1 + val2;//i ...

  4. Illegal invocation with document.querySelector [duplicate]

    document.querySelectorAll赋给其它变量时, 为什么要.bind(document)? https://stackoverflow.com/questions/12637061/ ...

  5. linux 系统调用sysconf【总结】

    1.前言 当前计算机都是多核的,linux2.6提供了进程绑定cpu功能,将进程指定到某个core上执行,方便管理进程.linux提供了sysconf系统调用可以获取系统的cpu个数和可用的cpu个数 ...

  6. 02-Django基础知识

    一.内容回顾 1.web应用程序 2.HTTP协议 a.http协议特性 b.http请求格式 c.http响应格式 3.wsgiref模块 4.Django下载与简单应用 a.Django简介(MT ...

  7. 爬虫高性能 asyncio库 twisted库 tornado库

    一 背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调的是 ...

  8. mysql 的crud操作(增删改查)

    1.mysql添加记录 --添加记录的语法(可添加单条记录或者多条记录),INTO是可以省略的,字段名也可以省略的,但是如果省略的话,后面对应的value的值就要全部填写 INSERT [INTO] ...

  9. jquery 第二章

    1.本章目标    css样式    选择器2.css样式    宽.高.边框.背景颜色.字体....... <html> <head> <style> div{ ...

  10. BZOJ3160 万径人踪灭 字符串 多项式 Manachar FFT

    原文链接http://www.cnblogs.com/zhouzhendong/p/8810140.html 题目传送门 - BZOJ3160 题意 给你一个只含$a,b$的字符串,让你选择一个子序列 ...