递归简论(以汉诺塔为例)

一 递归的定义
递归:当一个函数用它自己来定义时,就是递归
递归的实质:能够 把一个大问题拆解成小问题,然后用小问题的解,去构建大问题的解。
在这里插入图片描述
递归的一般步骤:
Base case:就是递归的零号问题,也是递归的终点。
拆解:每一层的问题都比上一层小,不断缩小问题的尺寸
组合:小问题,构造大问题的解
二 递归的设计法则
1.基准情形:必须有某些基准情形,它无需递归就能解出
2.不断推进:每一次递归的调用都必须要使状况朝向一种基准情形推进
3.设计法则:假设所有的递归调用都能运行
4.合成效益法则:在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作
三 递归的实现(以汉诺塔为例
递归实现的两个条件:递归出口(终止递归的条件)个递归表达式(规律)
技巧:递归通常被切割成两部分,这能让我们快速找到递归表达式(规律)
public static void main(string[] args){
int [] array={1,5,65,76};
hannuo(3,‘A’,'B‘,‘C’);
system.out,println(Arrays.toString(array));

public static void hannuo(int n,char start,char,transfer,char target){
//只有一个盘子 直接找到目标柱子
if(n==1){
System.out,println(start+"---->"+target);
}else{
//起始柱子借助目标柱子将盘子移动到中转柱子中(除了最大的盘子)
hannuo(n-1,start,target,transfer);
system.out.println(start+"------"+target);
//中转柱子借助起始柱子将盘子转移到目标柱子中
hannuo(n-1,transfer,start,target);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值