递归的用法

本文介绍了经典的汉诺塔问题,详细阐述了搬运规则,并通过递归思想解析了解决此类问题的方法。通过示例展示了总数为3的搬运过程,分析了如何将问题简化为搬运更少数量盘子的问题,最终归结为搬运一块盘子的基本情况。
摘要由CSDN通过智能技术生成
    递归是一种方法内调用自身方法的一种编程技术,像一些阶乘、求和等数学问题可以实现,不过复杂度会提高,最能体现递归之美的当属汉诺塔问题。同样我们用递归实现了斐波那契数列和三角数字。

汉诺塔问题:如下图所示,要求将一个座上的盘子全部搬运到最后一个支柱上,有一个辅助支柱。
在这里插入图片描述
搬运规则:
1.一次只能移动一张盘子
2.不能将较大的盘子放在较小的盘子上面
3.最后盘子只能全部放在某一个支柱上面
搬运示意图:下图是总数为3的搬运过程
在这里插入图片描述
显然,当进行到第三次搬运时,就回到总数为2的搬运题目,而第N个盘子可以在接下来的一步放入目标支柱(如上图的第四步);因此,我们可以考虑上面N-1块的盘子搬运问题,而N-1块的盘子搬运又可以看成是上面为N-2块加最底层那块,同样连续调用相同的方法解决,最后归结为一块的搬运问题。
下面是实现代码:

           package Recursion;
//递归方法的使用,test(),test2();
public class Recursion1 {
   
   public static void main(String[] args) {
   
//	   test2(50);
	   int total = Redetangle(5);
	   System.out.println(total);
	   System.out.println(Refeibbo(5))
PostgreSQL中的递归查询可以通过使用WITH RECURSIVE语句来实现。这种查询方式可以用于解决需要多层循环嵌套的问题。下面是一个示例: ```sql WITH RECURSIVE recursive_query AS ( -- 初始查询 SELECT initial_query UNION ALL -- 递归查询 SELECT recursive_query FROM recursive_query, recursive_table WHERE recursive_condition ) -- 最终查询 SELECT final_query FROM recursive_query ``` 在上面的示例中,WITH RECURSIVE语句定义了一个递归查询,其中包含初始查询和递归查询两部分。初始查询用于指定递归查询的起始条件,递归查询用于指定递归的条件和操作。最终查询用于从递归查询结果中选择所需的数据。 请注意,递归查询中的recursive_table是递归查询的表,recursive_condition是递归查询的条件。这些可以根据实际需求进行修改。 下面是一个具体的示例,假设有一个地区表region,其中包含地区的id和父地区的id。我们要查询某个地区的所有子地区,可以使用递归查询来实现: ```sql WITH RECURSIVE recursive_query AS ( -- 初始查询 SELECT id, name FROM region WHERE id = 1 -- 假设要查询id为1的地区的所有子地区 UNION ALL -- 递归查询 SELECT region.id, region.name FROM recursive_query, region WHERE region.parent_id = recursive_query.id ) -- 最终查询 SELECT * FROM recursive_query ``` 上面的示例中,初始查询选择了id为1的地区,递归查询选择了所有父地区id等于初始查询结果中id的地区。最终查询选择了递归查询的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值