2021Java春招面试真题详解,【Java核心面试宝典

===========================================================================================

优点:使用递归算法的优点是代码简洁且容易理解,

缺点:时间和空间消耗比较大,每一次函数调用都需要在内存栈中分配空间,对栈的操作可能还需要时间,因此时间和空间复杂度较高。

如果子问题之间存在重叠,则在不加记忆化的情况下,可能产生重复计算导致时间复杂度过高。

由于栈的空间有限,如果递归调用的次数太多,则可能导致调用栈溢出。

五、追问:那么可以通过什么方式解决递归的缺点?

==============================================================================================

解决递归的缺点有多种方式,尾递归是一种做法,另外还可以通过加记忆化的方式避免重复计算,以及改用迭代实现。

六、追问:阐述一下什么是尾递归?

=======================================================================================

当递归调用是方法中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归

尾递归的特点是在返回时直接传回原始的调用者,而不用经过中间的调用者,这个特点很重要,因为大多数现代的编译器会利用该特点自动生成优化的代码。

使用尾递归代替普通的递归,可以在时间和空间方面都带来显著的提升。

七、能不能修改斐波那契数列的普通递归为尾递归?

==============================================================================================

斐波那契数列的普通递归实现:


/**

	 * 斐波那契数列普通递归实现

	 * @param index

	 * @return

	 */

	public static long fibonacci(long index) {

		if (index <= 1) {

			return index;

		} else {

			return fibonacci(index - 1) + fibonacci(index - 2);

		}

	} 

斐波那契数列的尾递归实现:


/**

	  * 斐波那契数列尾递归实现

	 * @param index

	 * @return

	 */

	public static long fibonacciTailRecursion(long index) {

		return fibonacciTailRecursion(index, 0, 1);

	}



	/**

	 *递归体 

	 * @param index 循环序列

	 * @param present	当前值

	 * @param next	下一个值

	 * @return

	 */

	public static long fibonacciTailRecursion(long index, int present, int next) {

		if (index == 0) {

			return present;

		} else {

			return fibonacciTailRecursion(index - 1, next, present + next);



# 技术学习总结

学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。

![](https://img-blog.csdnimg.cn/img_convert/d7a6ddd2bb9494ee1ad0132fc5304223.png)

![](https://img-blog.csdnimg.cn/img_convert/d7ac2d43ad4eedc63eb8a175760eecfa.png)

![](https://img-blog.csdnimg.cn/img_convert/b3e04893684082264f7e0c971badb6c0.png)

# 最后面试分享

大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!

![](https://img-blog.csdnimg.cn/img_convert/c930dfb3da75997e8471963def2c237a.png)

![](https://img-blog.csdnimg.cn/img_convert/5d43e26670daa67c989c4b71ff817688.png)

直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!

[外链图片转存中...(img-PAPzSS4n-1628268031810)]

[外链图片转存中...(img-yL8hVZLH-1628268031812)]

**最后,若需要完整pdf版,可以点赞本文后[点击这里免费领取](https://gitee.com/vip204888/java-p7)**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值