package junit.test;
import java.util.Arrays;
import org.junit.Test;
public class excise {
private int[] initArray = {8,2,56,23,14,3,29,88,23,36};
//递归的应用求年龄问题
/*
* 用递归算法算出第1个人的年龄为10,第8个人的年龄是多少
*/
@Test
public void testLoop() {
//调用算第8个人的年龄的函数
int age = getAge(8);
System.out.println(age);
}
/**
* 算法:第n个人的年龄是第8个人的年龄(getAge(7))+2
* 所以可知:第n个人的年龄是第n-1个人的年龄(getAge(n-1))+2
* 知道最后返回第一个人的年龄为10
* @param index
* @return
*/
public int getAge(int index) {
if(index == 1) return 10;
return getAge(index - 1) + 2;
}
//递归算1-105的和
@Test
public void recursionTest() {
System.out.println(recursion(105));
}
public int recursion(int num) {
if(num == 1) return 1;
return num + recursion(num-1);
}
//递归算一个数的2进制编码
@Test
public void recirsionTest2() {
System.out.println(binary(0));
}
public String binary(int arg) {
if(arg < 2) return String.valueOf(arg);
int temp = arg % 2;
return binary(arg / 2) + String.valueOf(temp);
}
//汉诺塔问题
/*
* 汉诺塔问题是典型的应用递归的问题
* 题目:桌面上有三个放盘子的地方,其中1号位置放了n个盘子,并且每个上面的盘子都比下面的盘子小,其他两个
* 地方是空的,要求把1号位置上的盘子全部搬到3号位置上,每次只能搬一个,并且,大盘子不能放到小盘子上。可
* 以借用2号位置。
*
* 我们假设已经把1号上面的n-1个盘子搬到2号位置上了
* 接着我们把n盘子搬到3号位置上
* 然后把2号位置的盘子搬到3号位置上就完成任务了
*
*
*/
private int[] hnotaArray = {2, 3, 8, 14, 23, 23, 29, 36, 56, 88};
@Test
public void testHnota() {
int[] hA = hnotaArray;
try {
hnota(hnotaArray, 'f', 't', 'l');
} catch (RuntimeException e) {
e.printStackTrace();
}
}
public void hnota(int[] x, char a, char b, char c) {
// 当只有一个盘子的时候直接把盘子从1号盘子直接把到3号盘子上
if(x.length == 1) {
move(x[0], a, c);
return;
}
//把上面的n-1个盘子截取出来
int[] y = new int[x.length - 1];
for(int i=0; i<y.length; i++) {
y[i] = x[i];
}
//把1号上面的n-1个盘子搬到2号位置上了
hnota(y, a, c, b);
//把n盘子搬到3号位置上
move(x[y.length], a, c);
//把2号位置的盘子搬到3号位置上就完成任务了
hnota(y, b, c, a);
}
//把一个盘子从src搬到desc上
public void move(int z, char src, char desc) {
System.out.println("move " + z + " from " + src + " to " + desc);
}
}
分享到:
相关推荐
用C++实现汉诺塔的递归算法,定义了类和方法。
汉诺塔问题的递归算法,附详细代码以及运行结果,有详细的算法描述。
汉诺塔的算法,递归算法有详细的c语言程序设计结构,内含递归算法
用C语言实现汉诺塔的递归算法,另外还有用栈来实现的方式:http://download.csdn.net/detail/jason19905/6419427
汉诺塔递归算法: 问题抽象 3个塔,n个碟子 初始:所有碟子放在1号塔,大的在底下,小的在上面 任务:把碟子移动到2号塔,顺序不变, 可用3号塔辅助 限制 每次只能移动一个碟子 总是大碟子...
汉诺塔问题非递归算法的实现
汉诺塔问题的非递归算法分析是一个有趣的算法分析。
非递归汉诺塔算法,并带有一片武汉大学的算法描述。
汉诺塔非递归算法 用栈作为辅助存储结构 和数据结构中中序遍历二叉树的方法类似
利用C++编写汉诺塔的非递归算法以及其运行程序(算法中包含注释)。
c++递归实现汉诺塔问题。 算法分析与设计 例题的源码实现。跟书上的一样。
汉诺塔(河内塔)的经典非递归算法 开天辟地的神勃拉玛(和中国的盘古差不多的神吧)在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不...
用非递归算法,用栈解决问题,C#语言,来解决汉诺塔移动问题
非常短小的汉诺塔小程序 C语言撰写,方便C语言爱好者 使用,主要采用递归算法。
本人原创,思路想法里面都有。是根绝一些规律写的非递归,不是用递归改的。
用栈来实现汉诺塔,要明白递归就是栈的重要应用之一,递归是系统自动调用栈来处理。
汉诺塔递归与非递归结果对比,结果是no differences,说明非递归算法没错。递归算法参考了csdn另一名博主的博客。
我用vc编了一个用栈实现汉诺塔的非递归程序。可以运行的,里面代码作了说明的!
汉诺塔问题 动态效果 递归算法 vc可用 完美运行
适应于大学生学习算法