今天说下java语言中比较常见的一种方法,递归方法。

递归的定义

简单来说递归的方法就是“自己调用自己”,通过递归方法往往可以将一个大问题简单化,最终压缩到一个易于处理的程度。对于编程来说,每次递归都会减少数据量;

java中递归的模式

每个递归函数的开头一定是判断递归结束条件是否满足的语句(一般是if语句);函数体一定至少有一句是“自己调用自己”的。每个递归函数一定有一个控制递归可以终结的变量(通常是作为函数的参数而存在)。每次自己调用自己时,此变量会变化(一般是变小),并传送给被调用的函数。

下面是一个递归实现阶乘的简单程序

public static void main(String args[])
{
int n=8;
int x;
x=demo(n);
System.out.println(x); } public static int demo(int n)
{ int y; y=demo(n-1)*n;
return y;
} }

该程序只能简单的实现已输入数字的递归,可以将上述的改为用户自己输入的形式去实现递归的结果;(有多中用户输入的方法暂时不涉及)

汉诺塔问题看似简单,却在思考上需要耗费大量的时间,如果不采用递归的方法的话,在实现上很难完成

题目大致是这样的:有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子C上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动

接下来分析下这个问题

1.如果有A上有一个圆盘,直接将圆盘移到C上

2.如果有n个圆盘的话,则将前n-1个圆盘先移到B上,然后将自己移到,C上

所以这个问题可以分3步实现

1.将A上的n-1个圆盘借助C塔转移到B塔上

2把剩下的一个圆盘放到C上

3.将B上的n-1个圆盘借助A盘放到C盘上

以下是代码的实现

import javax.swing.JOptionPane;

public class Hannuo {
public static void main(String args[])
{
String w=" ";
w=JOptionPane.showInputDialog("please input panzishu");
int j=0;
char a='a',b='b',c='c';
j=Integer.parseInt(w);
move(j,a,b,c); }
public static void move(int m,char a,char b,char c)
{ if(m==1)
{
JOptionPane.showMessageDialog(null,a+"->"+c," ",JOptionPane.PLAIN_MESSAGE);
}
else
{
move(m-1,a,c,b);
JOptionPane.showMessageDialog(null,a+"->"+c," ",JOptionPane.PLAIN_MESSAGE);
move(m-1,b,a,c);
}
} }

java 中递归的实现 以及利用递归方法实现汉诺塔的更多相关文章

  1. 用递归方法解决汉诺塔问题(Recursion Hanoi Tower Python)

    汉诺塔问题源于印度的一个古老传说:梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.梵天命令婆罗门把圆盘按大小顺序重新摆放在另一根柱子上,并且规定小圆盘上不能放 ...

  2. 图解汉诺塔问题( Java 递归实现)

    汉诺塔简介 最近在看数据结构和算法,遇到了一个非常有意思的问题--汉诺塔问题. 先看下百度百科是怎么定义汉诺塔的规则的: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候 ...

  3. 零基础入门学习Python(24)--递归:汉诺塔

    知识点 这节课主要讲解用递归的方法,实现汉诺塔的解答 对于游戏的玩法,我们可以简单分解为三个步骤: 1) 将前63个盘子从X移动到Y上. 2) 将最底下的第64个盘子从X移动到Z上. 3) 将Y上的6 ...

  4. java实现汉诺塔算法

    package com.ywx.count; import java.util.Scanner; /** * @author Vashon * date:20150410 * * 题目:汉诺塔算法(本 ...

  5. java中递归的方法的实例

    package com.demo.recursion; // 所谓递归,是指程序调用自身,当然,递归不会无休止地调用下去,它必然有一个出口,当满足条件时程序也就结束了,不然的话,那就是死循环了.// ...

  6. java利用递归实现汉诺塔算法

    package 汉诺塔; //引入Scanner包,用于用户输入 import java.util.Scanner; public class 汉诺塔算法 { public static void m ...

  7. 算法笔记_013:汉诺塔问题(Java递归法和非递归法)

    目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...

  8. 化繁为简 经典的汉诺塔递归问题 in Java

    问题描述   在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑 ...

  9. 数据结构--汉诺塔--借助栈实现非递归---Java

    /*汉诺塔非递归实现--利用栈 * 1.创建一个栈,栈中每个元素包含的信息:盘子编号,3个塔座的变量 * 2.先进栈,在利用循环判断是否栈空, * 3.非空情况下,出栈,检查是否只有一个盘子--直接移 ...

随机推荐

  1. C语言相关的经典书籍(附Ebook)

    个人稍微分了一下类,有的看过,有的听人“传说过”,欢迎大家补充和共同学习. 真心经典:每个行业或者领域都有一些东西是不会随时间而逐渐消逝,以下的就是. <C语言程序设计>(第2版.新版) ...

  2. C语言之分支结构 if(一)

    一 程序的三种基本结构 顺序结构:程序从上往下依次执行,这个叫顺序结构 分支结构:有选择的执行或者不执行某段代码 循环结构:重复的执行某段代码 二 分支结构之if 最简单的俩种用法 (tips: if ...

  3. 一、spark入门之spark shell:wordcount

    1.安装完spark,进入spark中bin目录: bin/spark-shell   scala> val textFile = sc.textFile("/Users/admin/ ...

  4. Array类型方法总结(未写完)

    转换方法:  toString() toLocaleString() valueOf() 栈方法:   push()---在数组末尾添加项,返回修改后的长度,   pop()---在数组末尾移除项,返 ...

  5. LR回放和录制设置

    1.回放迭代设置:run-time settings 日志:扩展的-参数替换(常用).服务器返回数据.高级 2.回放时视图显示设置 设置 效果

  6. 修改cookie

    查看本地cookie方法一:点击 地址栏前面的 感叹号 !方法一:F12-->network->回车 请求一下 地址栏-->.出现的地址-->点击. header cookie ...

  7. oracle建表的时候同时创建主键,外键,注释,约束,索引

    --主键create table emp (id number constraint id_pr primary key ,name1 varchar(8));create table emp9 (i ...

  8. Hololens生成与安装(旁加载)应用

    Hololens生成应用的几种方式: 一:HoloToolkit编辑器生成appx应用 二:Vistul Studio 2015 创建应用 旁加载概述: 你可以将应用旁加载到你的设备,而无需将它们提交 ...

  9. Front-End(五)——工具使用

    mac端推荐使用sublime+emmet. 环境搭建 sublime 官网下载sublime text 02或者03,03现在(2016.07)还是测试版,我使用的是text02. emmet su ...

  10. 网页数据抓取(B/S)

    C# 抓取网页内容(转) 1.抓取一般内容 需要三个类:WebRequest.WebResponse.StreamReader 所需命名空间:System.Net.System.IO 核心代码: We ...