求一个javajava汉诺塔递归算法法的执行流程

Java之递归求和的两种简单方法(推荐)
投稿:jingxian
字体:[ ] 类型:转载 时间:
下面小编就为大家带来一篇Java之递归求和的两种简单方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
package com.smbea.
public class Student {
private int sum = 0;
* 递归求和
* @param num
public void sum(int num) {
this.sum += num--;
if(0 & num){
System.out.println("sum = " + sum);
package com.smbea.
public class Test {
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.sum();
public static int sum(int num){
if(1 == num){
return num + sum(num - 1);
当然还有其它方法,如采用 for 循环、while 循环等,那就不属于递归了!这里就不做讨论了。
以上这篇Java之递归求和的两种简单方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具java实现的经典递归算法三例
一、写作此文的原因:
  学过程序设计的朋友都知道,存在自调用的算法称作递归算法。 递归往往能给我们带来非常简洁
非常直观的代码形势,从而使我们的编码大大简化,然而递归的思维确实很我们的常规思维相逆的,
我们通常都是从上而下的思维问题, 而递归趋势从下往上的进行思维,正由于此,很多人对于递归有
着深深的恐惧,我曾经也是如此,如今为把我的经验通过几个经典的例子与初学者共享,故作此文,
希望能对需要者有所助益,如若如此,便是幸甚……
  二、递归算法设计的基本思想是:对于一个复杂的问题,把原问题分解为若干个相对简单类同的
子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推
  关键要抓住的是:
  (1)递归出口
  (2)地推逐步向出口逼近
  三、具体说明
  1.汉诺塔
  这是递归的超经典的例子,几乎每本程序设计书上谈到递归都会介绍。具体情景不再赘述。以我
上述的方法观之:(1)递归的出口在于disk数为一的时候
  (2)向出口逼近:如果不是一,是n ,则我们先挪动上面n-1块disk,等上面挪完,即递归返回
的时候,我们挪动最底下的disk.
  仅仅如此,一个貌似十分复杂的问题就解决了,因为挪动那n-1块disk的时候,会继续向上减少,
直到disk的数量为一为止。下面给出java程序编码(已测试过,运行正常):
  import javax.swing.JOptionPane;
  public class Hanoi {
  private static final String DISK_B = "diskB";
  private static final String DISK_C = "diskC";
  private static final String DISK_A = "diskA";
  static String from=DISK_A;
  static String to=DISK_C;
  static String mid=DISK_B;
  public static void main(String[] args) {
  String input=JOptionPane.showInputDialog("please input the
number of the disks you
want me move.");
  int num=Integer.parseInt(input);
  move(num,from,mid,to);
  private static void move(int num, String from2, String mid2,
String to2) {
  if(num==1){
  System.out.println("move disk 1 from "+from2+" to "+to2);
  else {
  move(num-1,from2,to2,mid2);
  System.out.println("move disk "+num+" from "+from2+" to
  move(num-1,mid2,from2,to2);
  2.这是一个排列的例子,它所做的工作是将输入的一个字符串中的所有元素进行排序并输出,例
如:你给出的参数是"abc" 则程序会输出:
  (1)算法的出口在于:low=high也就是现在给出的排列元素只有一个时。
  (2)算法的逼近过程:先确定排列的第一位元素,也就是循环中i所代表的元素,
  然后low+1开始减少排列元素,如此下去,直到low=high
  public static void permute(String str) {
  char[] strArray = str.toCharArray();
  permute(strArray, 0, strArray.length - 1);
  public static void permute(char[] list, int low, int high)
  int i;
  if (low == high) {
  String cout = "";
  for (i = 0; i &= high; i++)
  cout += list[i];
  System.out.println(cout);
  } else {
  for (i = low; i &= high; i++) {
  char temp = list[low];
  list[low] = list[i];
  list[i] = temp;
  permute(list, low + 1, high);
  temp = list[low];
  list[low] = list[i];
  list[i] = temp;
  3。这是一个组合的例子,与上述的例子相似,只是它所做的工作是,输出所给字符串中制定数
目的元素的组合种类
  (1)程序出口在于n=1,此时只要输出目标数组的所有元素即可
  (2)逼近过程,当n>1 的时候,我们先取第一个元素放入目标数组中,然后n-1,如此
下去,最后出来。
  import javax.swing.JOptionPane;
  public class Combination {
  public static void main(String[] args) {
  String input = JOptionPane.showInputDialog("please input your
String: ");
  String numString = JOptionPane.showInputDialog("please input
the number of your
Combination: ");
  int num = Integer.parseInt(numString);
  Combine(input, num);
  private static void Combine(String input, int num) {
  char[] a = input.toCharArray();
  String b = "";
  Combine(a, num, b, 0, a.length);
  private static void Combine(char[] a, int num, String b, int
low, int high) {
  if (num == 0) {
  System.out.println(b);
  } else {
  for (int i = low; i & a.length; i++) {
  b += a[i];
  Combine(a, num - 1, b, i+1, a.length);
  b=b.substring(0, b.length()-1);
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。1690人阅读
&Coding多了,递归算法是非常常见的,最近我一直在做树形结构的封装,所以更加的离不开递归算法。所以今天就简单说一下这个递归算法,用java实现一个非常经典的递归实例。
& & & & 递归算法,其实说白了,就是程序的自身调用。它表现在一段程序中往往会遇到调用自身的那样一种coding策略,这样我们就可以利用大道至简的思想,把一个大的复杂的问题层层转换为一个小的和原问题相似的问题来求解的这样一种策略。这样我们就能看到我们会用很少的语句解决了非常大的问题,所以递归策略的最主要体现就是小的代码量解决了非常复杂的问题。
& & & & 做过树形结构的都知道,我们有时候遇到的树是无限级别的树,这样我们就必须要利用循环和递归算法来实现无限级别的树。
& & & & 在做递归算法的时候,一定要把握住出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口是非常好理解的,就是一个条件,当满足了这个条件的时候我们就不再递归了。
& & & &下面用一个java的实例来实现一下递归算法。
& & & & 问题描述:
& & & &Java代码清单:
& & & & &&运行结果:
& & & & 程序分析:
& & & & & & & & 这个实例是非常经典的实例,主要是利用递归实现了Fibonacci数列。这个递归算法的出口是在
& & & & & & & & 这个代码段上,如果程序的index符合条件就会停止进行递归。所以这个程序的运行流程是:
& & & & 程序分析到这里,递归的实现也就完成了,读者可以自己简单的做个demo,感受一下这个算法的精妙之处,其实很多人都在说算法难,难于上青天,其实掌握算法的根才是最重要的,什么是算法的根呢,就拿这个递归算法来说吧,我感觉这个根就是那个出口,只要找到这个出口所在,那么算法自然而然就能水到渠成了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:108316次
积分:1734
积分:1734
排名:千里之外
原创:55篇
转载:131篇
(3)(2)(18)(30)(4)(6)(56)(44)(17)(9)(2)(3)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'求一个递归算法【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:653,898贴子:
求一个递归算法收藏
生成0-9为名称的文件夹 每个文件夹里又包含0-9的文件夹 n层 递归好难
海运集装箱 锦江航运
我顶你,可惜我不会。
京广达 黏胶带 耐高温,耐低温,耐碾压,抗污,防滑
public static void main(String[] args) {
String path=&D://Test&;
for(int i=0;i&10;i++){
createFolder(path,i);
}}public static void createFolder(String path,int index){
//TODO 创建文件夹,路径path,名index
for(int i=0;i&10;i++){
createFolder(path+&/&+index,i);
}}大概这个思路吧
登录百度帐号推荐应用1.什么是递归算法
&& 递归算法就是直接或间接调用自己的算法
2.问题1:一列数的规则如下: 1、1、2、3、5、8、13、21、34 ,求第30位数是多少?使用递归实现
1 public class FibonacciSequence {
public static void main(String[] args){
System.out.println(Fribonacci(9));
public static int Fribonacci(int n){
return Fribonacci(n-1)+Fribonacci(n-2);
3.问题2:汉诺塔问题
汉诺塔(又称河内塔)问题其实是印度的一个古老的传说。
开天辟地的神勃拉玛(和中国的盘古差不多的神吧)在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一 个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上 面。计算结果非常恐怖(移动圆片的次数),众僧们即便是耗尽毕生精力也不可能完成金片的移动了。
要求:输入一个正整数n,表示有n个盘片在第一根柱子上。输出操作序列,格式为&移动 t从 x 到 y&。每个操作一行,表示把x柱子上的编号为t的盘片挪到柱子y上。柱子编号为A,B,C,你要用最少的操作把所有的盘子从A柱子上转移到C柱子上。
1 public class Hanio {
public static void main(String[] args){
char a ='A',b='B',c='C';
hanio(i,a,b,c);
public static void hanio(int n,char a,char b,char c){
System.out.println("移动"+n+"号盘子从"+a+"到"+c);
hanio(n-1,a,c,b);//把上面n-1个盘子从a借助b搬到c
System.out.println("移动"+n+"号盘子从"+a+"到"+c);//紧接着直接把n搬动c
hanio(n-1,b,a,c);//再把b上的n-1个盘子借助a搬到c
阅读(...) 评论()

我要回帖

更多关于 java递归算法例子 的文章

 

随机推荐