龙空技术网

Java 算法篇-深入理解递归(递归实现:青蛙爬楼梯)

YY编程 137

前言:

当前咱们对“java中递归怎么实现”大致比较讲究,兄弟们都想要了解一些“java中递归怎么实现”的相关文章。那么小编在网上汇集了一些有关“java中递归怎么实现””的相关资讯,希望朋友们能喜欢,朋友们快快来了解一下吧!

1.0 递归的说明

递归就是在一个函数中调用自身。这样做可以让我们解决一些问题,比如计算斐波那契数列、阶乘等。

递归函数一般包括两部分:基本情况和递归情况。基本情况是指当问题变得很小,可以直接得到答案时,递归就可以停止了。递归情况是指在解决问题的过程中,需要不断地调用自身来解决更小规模的问题。

对于递归这个算法,简单的来说,方法自身调用自身的时候,需要有终止的条件,在运行过程中不断的趋向终止条件。还有递归总的来说有两个动作:第一个动作是递出,方法不断的在栈区中创建出来,直到达到了条件就会停止。第二个动作,达到条件停止了,就会回归,指方法在栈区中依次执行完后就销毁。

2.0 用递归来实现相关问题

以下的问题都较为简单,采取直接用代码来演示。

2.1 递归 - 阶乘

代码如下:

2.2 递归 - 反向打印字符串

代码如下:

2.3 递归 - 二分查找

代码如下:

2.4 递归 - 冒泡排序

代码如下:

2.5 递归 - 冒泡排序2.0

对冒泡排序进行升级,假如 int[] arr = {2,1,1,3,4,5,9},这种只需要遍历一遍即可,但是对与已经用递归实现的冒泡不止遍历一次。因此,需要得到升级版冒泡排序。

思路为:对于后续的元素已经是排好序了,就不用再遍历了。每一次交换完元素之后记下来 i 索引,i 之后的元素已经是排好序的,i 之前的元素还需要继续遍历,看是否还需要交换。

代码如下:

2.6 递归 - 插入排序

思路:假设第一个元素已经排序好了的,在已经排好的元素的后一个元素记录为 low,这个 low 索引对应的元素需要用临时变量来接受,只要找到比这个索引对应的元素小的值,就可以插入到比它小的值的后一个索引位置了,当然,每一次对比之后,都需要往后移一个位置,以便直接插入。当 low 一直每一个加 1 ,当 low 等于数组的长度时,就该停止了继续递归下去了。

代码如下:

2.7 递归 - 斐波那契

代码如下:

2.8 递归 - 兔子问题

一个斐波那契的变体问题。

思路:观察第六个月的兔子个数,是否等于第四个月的兔子的总数加上第五个月的兔子总数;类推,第五个月的兔子个数,是否等于第四个月的兔子的总数加上第三个月的兔子总数;以此类推,是符合斐波那契逻辑的。

代码如下:

2.9 递归 - 青蛙爬楼梯

一个斐波那契的变体问题

题目如下:

实现思路: 一个阶梯一种跳法,两个阶梯两种跳法。重点,如果有四个阶梯,从后往前分析,分两种情况;第一种,从第二个台阶直接一下子跳两阶上来。第二种,从第三个台阶跳一阶上来。那么从考虑第一种情况,前面两阶是不是就是只有两种方法。考虑第二种情况,前面的三个台阶是不是就是前面已经算出来的方式跳法个数了。因此,这就是一个斐波那契的变体问题。

代码如下:

标签: #java中递归怎么实现 #递归实现逆序输出字符串c语言