递归的几个经典例子

注意:构造方法不可递归,否则是无限创建对象;

递归的几个经典例子:

1.HannoiTower

  1 import java.util.Scanner;
  2  public class HanoiTower{
  3      //level代表盘子个数;三个char类型代表柱子
  4     public static void moveDish(int level, char from, char inter, char to){
  5          if(level == 1){
  6              System.out.println("从"+from+"移动盘子1号到"+to);
  7          }else{
  8
  9              moveDish(level-1,from,to,inter);//调用自身
 10             System.out.println("从"+from+"移动盘子"+level+"号到"+to);
 11              moveDish(level-1,inter,from,to);
 12          }
 13      }
 14
 15     public static void main(String[] args){
 16          Scanner sc = new Scanner(System.in);
 17          System.out.println("请输入盘子个数");
 18          int n = sc.nextInt();
 19          moveDish(n,‘a‘,‘b‘,‘c‘);
 20      }
 21  }
 22 

2.sum

  1 import java.util.Scanner;
  2  public class Sum{
  3      public static void main(String[] args){
  4          Scanner sc = new Scanner(System.in);
  5          System.out.println("请输入n:");
  6          int n = sc.nextInt();
  7          int sum1 = sum(n);
  8         System.out.println(sum1;
  9      }
 10
 11     public static int sum(int n){
 12          if(n == 1){
 13              return 1;
 14          }else{
 15              return n+sum(n-1);
 16          }
 17      }
 18  }
 19 

3.factorial

  1 import java.util.Scanner;
  2  public class Factorial{
  3      public static void main(String[] args){
  4          Scanner sc = new Scanner(System.in);
  5          System.out.println("请输入一个小于20的整数,我会帮你求出它的阶乘:");
  6          int n = sc.nextInt();
  7          int fac1 = fac(n);
  8          System.out.println(n+"的阶乘为:"+fac1);
  9          System.out.println("~看我棒不棒~~");
 10      }
 11
 12     public static int fac(int n){
 13          if(n == 1){B
 14              return 1;
 15          }else{
 16              return n*fac(n-1);
 17          }
 18      }
 19  }
 20 

4.sumFactorial

  1 import java.util.Scanner;
  2  public class SumFactorial{
  3      public static void main(String[] args){
  4          Scanner sc = new Scanner(System.in);
  5          System.out.println("请输入一个小于20的整数:");
  6          int n = sc.nextInt();
  7          int sf = sumFac(n);
  8          System.out.println(sf);
  9      }
 10      //阶乘和的累加
 11     public static int sumFac(int n){
 12          if(n == 1){
 13              return 1;
 14          }else{
 15              return fac(n)+sumFac(n-1);
 16          }
 17      }
 18      //求阶乘
 19     public static int fac(int n){
 20          if(n == 1){
 21              return 1;
 22          }else{
 23              return n*fac(n-1);
 24          }
 25      }
 26  }

5.使用递归,遍历 1 至100之间的每个数字

  1 public class Number{
  2      public static void main(String[] args){
  3          iterator(100);
  4      }
  5
  6     public static void iterator(int n){
  7          if(n >= 1){
  8              System.out.print(n+"\t");
  9              n--;
 10              iterator(n);
 11          }
 12
 13     }
 14  }
 15
 16
 17 
时间: 2024-08-04 18:18:03

递归的几个经典例子的相关文章

Conquer-Divide的经典例子之Strassen算法解决大型矩阵的相乘

在通过汉诺塔问题理解递归的精髓中我讲解了怎么把一个复杂的问题一步步recursively划分了成简单显而易见的小问题.其实这个解决问题的思路就是算法中常用的divide and conquer, 这篇日志通过解决矩阵的乘法,来了解另外一个基本divide and conque思想的strassen算法.矩阵A乘以B等于X, 则Xij = 注意左乘右乘的区别,AB 与BA是不同的.如果r = 1, 直接就是两个数的相乘.如果r = 2, 例如X = [ 1, 2;   3, 4];Y = [ 2,

小猪的数据结构辅助教程——2.5 经典例子:约瑟夫问题的解决

小猪的数据结构辅助教程--2.5 经典例子:约瑟夫问题的解决 标签(空格分隔): 数据结构 约瑟夫问题的解析 关于问题的故事背景就不提了,我们直接说这个问题的内容吧: 一堆人,围成一个圈,然后规定一个数N,然后依次报数,当报数到N,这个人自杀,其他人鼓掌!啪啪啪, 接着又从1开始报数,报到N又自杀-以此类推,直到死剩最后一个人,那么游戏结束! 这就是问题,而我们用计算机模拟的话,用户输入:N(参与人数),M(第几个人死),结果返回最后一个人! 类似的问题有跳海问题,猴子选王等,下面我们就以N =

二叉树的递归遍历和非递归遍历(附详细例子)

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

信号量基础和两个经典例子

信号量基础和两个经典例子 信号量(semaphore) 用于进程中传递信号的一个整数值. 三个操作: 1.一个信号量可以初始化为非负值 2.semWait操作可以使信号量减1,若信号量的值为负,则执行semWait的进程被阻塞.否则进程继续执行. 3.semSignal操作使信号量加1.若信号量的值小于等于0,则被semWait操作阻塞的进程讲被接触阻塞. ps: semWait对应P原语,semSignal对应V原语. 信号量以及PV原语的C语言定义如下 struct semaphore {

python经典例子

http://wangwei007.blog.51cto.com/68019/1106735  检查Linux系统日志error和mysql错误日志的脚本 http://wangwei007.blog.51cto.com/68019/1102836  pickle http://wangwei007.blog.51cto.com/68019/1045577  python用zipfile模块打包文件或是目录.解压zip文件实例 http://blog.163.com/kefan_1987/blo

storm经典例子的wordcount的实现

storm有个经典的例子wordcount,其实这几乎可以说是大数据的经典例子了,mapreduce也会有这个例子.但是storm给的例子包里的WordCountTopology用到了python的调用,直接用eclipse跑起来的话会报错,这里做了个小改动. 1.WordCountTopology.java package storm.starter; import backtype.storm.Config; import backtype.storm.LocalCluster; impor

小猪的数据结构辅助教程——2.6 经典例子:魔术师发牌问题和拉丁方阵问题

小猪的数据结构辅助教程--2.6 经典例子:魔术师发牌问题和拉丁方阵问题 标签(空格分隔): 数据结构 本节引言: 本节继续带来的是循环链表的两个经典例子,分别是魔术师发牌问题和拉丁方阵问题! 1.魔术师发牌问题 问题描述: 魔术师利用一副牌中的13张黑桃牌,预先将他们排好后叠放在一起,牌面朝下.对观众说:"我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?现场演示."魔术师将牌堆最上面的哪张排数为1,把他翻过来正好是黑桃A,将黑桃A从牌堆抽出放在桌子上,第二次数1.2

linux Posix 信号量 三 (经典例子)

本文将阐述一下信号量的作用及经典例子,当中包括“<越狱>寄信”,“家庭吃水果”,“五子棋”,“接力赛跑”,“读者写者”,“四方恋爱”等 首先,讲 semWait操作(P操作)和semSignal操作(V操作)的一些基本原则.(接下来同意称为P,V操作) 1. P操作,s - -,if(s<0)阻塞自己 2. V操作,s++,if(s<=0)唤醒一个其他进程 3. P,V操作时原语(通俗讲,就是执行PV操作时时不能被打打断的) 4. P,V操作总是成对出现的.P:资源申请/分配:V操

javascript经典例子

javascript经典例子  一.验证类 1.数字验证内 1.1 整数 1.2 大于0的整数 (用于传来的ID的验证) 1.3 负整数的验证 1.4 整数不能大于iMax 1.5 整数不能小于iMin 2.时间类 2.1 短时间,形如 (13:04:06) 2.2 短日期,形如 (2003-12-05) 2.3 长时间,形如 (2003-12-05 13:04:06) 2.4 只有年和月.形如(2003-05,或者2003-5) 2.5 只有小时和分钟,形如(12:03) 3.表单类 3.1