1,面试题:利用递归实现5*4*3*2*1的值:
public class FactorialDemo {
public static void main(String[] args) {
System.out.println("5*4*3*2*1="+factorial(5));
}
public static long factorial(long n){//求n!
if(n==0){
return 1;
}else{
return n*factorial(n-1);//利用递归n!=n*(n-1)!直到0
}
}
}
输出结果:5*4*3*2*1=120
2,面试题:利用递归实现三个盘子的汉落塔的过程:
public class FactorialDemo2 {
static int count=1;
public static void main(String[] args) {
char a='A',b='B',c='C';
int num=3;//圆盘的个数
hanoi(a,b,c,num);
}
public static void move(char j,char k){
System.out.println("第"+(factorialDemo2.count++)+
"步:将一个盘子从柱子"+j+"拿到柱子"+k);
}
public static void hanoi(char a,char b,char c,int n){
//假设有n片,移动次数是f(n).显然f(1)=1,f(2)=3,f(3)=7,f(4)=15,
//且f(k+1)=2*f(k)+1 那么汉落塔的算法:f(n)=2^n-1 n=圆盘的个数
if(n==1){
move(a,c);
}else{
hanoi(a,c,b,n-1);
move(a,c);
hanoi(b,a,c,n-1);
}
}
}
输出结果:第1步:将一个盘子从柱子A拿到柱子B
第2步:将一个盘子从柱子A拿到柱子C
第3步:将一个盘子从柱子B拿到柱子C
第4步:将一个盘子从柱子A拿到柱子B
第5步:将一个盘子从柱子C拿到柱子A
第6步:将一个盘子从柱子C拿到柱子B
第7步:将一个盘子从柱子A拿到柱子B
第8步:将一个盘子从柱子A拿到柱子C
第9步:将一个盘子从柱子B拿到柱子C
第10步:将一个盘子从柱子B拿到柱子A
第11步:将一个盘子从柱子C拿到柱子A
第12步:将一个盘子从柱子B拿到柱子C
第13步:将一个盘子从柱子A拿到柱子B
第14步:将一个盘子从柱子A拿到柱子C
第15步:将一个盘子从柱子B拿到柱子C
汉落塔相关资料:http://baike.baidu.com/view/191666.htm
分享到:
相关推荐
求第30位数是多少, 用递归算法实现。 2 有一个3*4矩阵,输出最大元素的值,及其所在的行号和列号, int a[3][4]={{1,2,3,4},{9,8,7,6}, {-10,10,-5,2}}。 3 实现二分法查找,int a[8] = {3,12,24,36,55,68,75,...
在PHP的世界里,面试题是衡量开发者技能和经验的重要手段,尤其在算法这一领域,它直接反映了开发者的逻辑思维能力和问题解决能力。算法是计算机科学的基础,对于PHP开发者来说,理解并能熟练运用各种算法至关重要。...
以Java语言为例,递归算法和循环算法是实现阶乘计算的两种常见方法。它们各有优劣,在实际应用中需要根据具体问题的性质和要求来选择合适的方法。 首先,让我们详细探讨递归方法在计算阶乘中的应用。在递归方法中,...
在IT行业中,面试题和算法是开发者们提升技能和求职必备的重要部分,特别是在Java领域。本文将深入探讨Java面试中的常见问题以及相关的算法知识,并结合源码分析来加强理解。 一、Java面试题 1. **Java基础**:...
掌握上述39道JAVA经典算法面试题及其解析,对于任何希望在软件开发行业中取得成功的人来说都是极其宝贵的。通过这些题目的练习,读者不仅能加深对JAVA编程语言的理解,还能提升在实际工作中解决复杂算法问题的能力。...
**知识点**:本题考查如何判断两个链表是否存在公共节点。 **解题思路**: 1. **双指针法**:使用两个指针,一个从第一个链表开始,另一个从第二个链表开始。 2. **同步移动**:当一个指针到达链表末尾时,将其移动...
总之,这些C#算法面试题涵盖了基础的排序算法、递归问题解决以及面向对象设计中的事件处理。理解和熟练掌握这些知识点对于提升C#开发者的技术能力至关重要,也是面试中常被问到的题目。在实际编程工作中,了解和运用...
通过调整起点使两个链表的剩余长度相同,然后同时遍历两个链表,检查是否存在相同的节点。 - **步骤**: 1. 遍历两个链表,获取长度`len1`和`len2`。 2. 使长度较长的链表先向前移动`|len1-len2|`步。 3. 同时遍历...
本书《算法面试题100道for阿里、百度、腾讯、京东、美团、今日头条.pdf》是一份面向希望进入中国顶尖互联网公司(如阿里、百度、腾讯、京东、美团、今日头条等)工作,尤其是软件开发岗位的求职者,所准备的面试材料...
微软的面试题通常涵盖了数据结构、排序算法、图论、动态规划、递归、贪心算法等多个主题。以下是一些可能出现在微软面试中的编程算法知识点: 1. **数据结构**:包括数组、链表、栈、队列、哈希表、树(二叉树、...
非递归实现相对复杂,需要维护两个栈,一般采用迭代的方式,确保左右子树都遍历完后再访问根节点。 在给定的代码中,还包含了一个用于创建二叉树节点的`alloc_item`函数,以及一个插入节点到二叉树的`insert_to_...
这份"22道数据结构算法面试题.zip"压缩包文件显然旨在帮助求职者准备这些关键的面试环节。以下是对这些可能面试题目的详细解读,以及相关的知识点。 1. **链表操作**:链表是一种线性数据结构,它通过节点间的指针...
【JAVA经典算法40题面试题案例】 在Java面试中,算法题是考察候选人编程能力的重要环节。这里我们探讨三个常见的算法问题及其解决方案。 **问题1:斐波那契数列(Fibonacci Sequence)** 斐波那契数列是一个序列...
在IT行业中,编程语言C和C++是基石,它们被广泛用于系统级编程、游戏开发、嵌入式系统以及各种高性能计算。...因此,无论是初学者还是经验丰富的程序员,这个C/C++实现的经典算法和面试题集都是宝贵的参考资料。
本资源包聚焦于C语言实现的数据结构面试题,旨在帮助应聘者准备相关面试,提升对数据结构和算法的理解。 一、链表 链表是一种线性数据结构,与数组不同,它在内存中不是连续存储的。每个节点包含数据和指向下一个...
作为一名准备进入该领域或者寻求提升的工程师,掌握算法面试题的解法是必须的。本文总结了五道常见的算法面试题,并对每一道题目进行了详细解答和分析,旨在帮助大家深入理解算法设计的基本原理和方法。 首先,将...
2. **React面试题**:React的核心概念如虚拟DOM、JSX、组件生命周期、状态管理和Props、Redux或Context API等会是常见考点。 【HTTP & HTTPS】 1. **HTTP协议**:面试者需要理解HTTP的基本原理、请求方法(GET、...
面试题9:用两个栈实现队列 面试题10:裴波那契数列 面试题11:旋转数组的最小数字 面试题12:矩阵中的路径 面试题13:机器人的运动范围 面试题14:剪绳子 面试题15:二进制中1的个数 面试题16:数值的整数次方 面试...
该描述进一步解释了标题,表明该资源包含了40个JAVA经典算法面试题,这些题目涵盖了基本的算法面试代码题。 三、标签:“经典算法40题” 该标签表明该资源的主题是关于经典算法的40个题目。 四、部分内容: (1...