`
417441631
  • 浏览: 12006 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[面试题]递归算法实现的两个面试题

阅读更多

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

分享到:
评论

相关推荐

    C#经典算法面试题

    求第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的世界里,面试题是衡量开发者技能和经验的重要手段,尤其在算法这一领域,它直接反映了开发者的逻辑思维能力和问题解决能力。算法是计算机科学的基础,对于PHP开发者来说,理解并能熟练运用各种算法至关重要。...

    递归算法(阶乘)

    以Java语言为例,递归算法和循环算法是实现阶乘计算的两种常见方法。它们各有优劣,在实际应用中需要根据具体问题的性质和要求来选择合适的方法。 首先,让我们详细探讨递归方法在计算阶乘中的应用。在递归方法中,...

    面试题和算法

    在IT行业中,面试题和算法是开发者们提升技能和求职必备的重要部分,特别是在Java领域。本文将深入探讨Java面试中的常见问题以及相关的算法知识,并结合源码分析来加强理解。 一、Java面试题 1. **Java基础**:...

    JAVA经典算法面试39题及答案

    掌握上述39道JAVA经典算法面试题及其解析,对于任何希望在软件开发行业中取得成功的人来说都是极其宝贵的。通过这些题目的练习,读者不仅能加深对JAVA编程语言的理解,还能提升在实际工作中解决复杂算法问题的能力。...

    算法面试经典 100题

    **知识点**:本题考查如何判断两个链表是否存在公共节点。 **解题思路**: 1. **双指针法**:使用两个指针,一个从第一个链表开始,另一个从第二个链表开始。 2. **同步移动**:当一个指针到达链表末尾时,将其移动...

    C#常见算法面试题小结

    总之,这些C#算法面试题涵盖了基础的排序算法、递归问题解决以及面向对象设计中的事件处理。理解和熟练掌握这些知识点对于提升C#开发者的技术能力至关重要,也是面试中常被问到的题目。在实际编程工作中,了解和运用...

    算法,面试题

    通过调整起点使两个链表的剩余长度相同,然后同时遍历两个链表,检查是否存在相同的节点。 - **步骤**: 1. 遍历两个链表,获取长度`len1`和`len2`。 2. 使长度较长的链表先向前移动`|len1-len2|`步。 3. 同时遍历...

    算法面试题100道for阿里、百度、腾讯、京东、美团、今日头条.pdf

    本书《算法面试题100道for阿里、百度、腾讯、京东、美团、今日头条.pdf》是一份面向希望进入中国顶尖互联网公司(如阿里、百度、腾讯、京东、美团、今日头条等)工作,尤其是软件开发岗位的求职者,所准备的面试材料...

    微软面试题 编程算法

    微软的面试题通常涵盖了数据结构、排序算法、图论、动态规划、递归、贪心算法等多个主题。以下是一些可能出现在微软面试中的编程算法知识点: 1. **数据结构**:包括数组、链表、栈、队列、哈希表、树(二叉树、...

    IT面试题-二叉树的三种遍历的递归与非递归实现,详细代码

    非递归实现相对复杂,需要维护两个栈,一般采用迭代的方式,确保左右子树都遍历完后再访问根节点。 在给定的代码中,还包含了一个用于创建二叉树节点的`alloc_item`函数,以及一个插入节点到二叉树的`insert_to_...

    22道数据结构算法面试题.zip_22道数据结构算法面试题_算法面试题

    这份"22道数据结构算法面试题.zip"压缩包文件显然旨在帮助求职者准备这些关键的面试环节。以下是对这些可能面试题目的详细解读,以及相关的知识点。 1. **链表操作**:链表是一种线性数据结构,它通过节点间的指针...

    JAVA经典算法40题面试题案例.pdf

    【JAVA经典算法40题面试题案例】 在Java面试中,算法题是考察候选人编程能力的重要环节。这里我们探讨三个常见的算法问题及其解决方案。 **问题1:斐波那契数列(Fibonacci Sequence)** 斐波那契数列是一个序列...

    用C/C++实现的各种经典算法以及常见面试题

    在IT行业中,编程语言C和C++是基石,它们被广泛用于系统级编程、游戏开发、嵌入式系统以及各种高性能计算。...因此,无论是初学者还是经验丰富的程序员,这个C/C++实现的经典算法和面试题集都是宝贵的参考资料。

    c 数据结构 面试题 算法 面试题

    本资源包聚焦于C语言实现的数据结构面试题,旨在帮助应聘者准备相关面试,提升对数据结构和算法的理解。 一、链表 链表是一种线性数据结构,与数组不同,它在内存中不是连续存储的。每个节点包含数据和指向下一个...

    算法面试题总结.pdf

    作为一名准备进入该领域或者寻求提升的工程师,掌握算法面试题的解法是必须的。本文总结了五道常见的算法面试题,并对每一道题目进行了详细解答和分析,旨在帮助大家深入理解算法设计的基本原理和方法。 首先,将...

    前端面试小册,包含Vue面试题,React面试题,JS面试题,HTTP面试题,工程化面试题,CSS面试题,算法面试题,大厂面试题

    2. **React面试题**:React的核心概念如虚拟DOM、JSX、组件生命周期、状态管理和Props、Redux或Context API等会是常见考点。 【HTTP & HTTPS】 1. **HTTP协议**:面试者需要理解HTTP的基本原理、请求方法(GET、...

    面试高频算法题总结-剑指Offer题解

    面试题9:用两个栈实现队列 面试题10:裴波那契数列 面试题11:旋转数组的最小数字 面试题12:矩阵中的路径 面试题13:机器人的运动范围 面试题14:剪绳子 面试题15:二进制中1的个数 面试题16:数值的整数次方 面试...

    JAVA经典算法40面试题

    该描述进一步解释了标题,表明该资源包含了40个JAVA经典算法面试题,这些题目涵盖了基本的算法面试代码题。 三、标签:“经典算法40题” 该标签表明该资源的主题是关于经典算法的40个题目。 四、部分内容: (1...

Global site tag (gtag.js) - Google Analytics