递归---调用自己的编程技巧

本文深入剖析递归算法,通过经典示例斐波那契数列和汉诺塔问题,详细解释递归的逻辑和实现过程,帮助读者理解递归的基本原理和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

递归的内容剖析
1.递归其实就是传入不同参数,调用同一方法.多层之间相互嵌套,相互传递,直到参数达到某种边界.
2.要想用递归要理解每个递归的逻辑,也就是每个递归的公式.(这是难点)

递归的经典示例

1.斐波那契数列

斐波那契数列的排列是:0,1,1,2,3,5,8,13,21,34,55,89,144……依次类推下去,你会发现,它后一个数等于前面两个数的和。在这个数列中的数字,就被称为斐波那契数。

递归逻辑:一个数等于前两个数之和.

package demo;
public class Sum { 
public static void main(String[] args) {
  int i = 1;  for (i = 1; i <= 20; i++) {   
  System.out.println("前" + i + "个数的和为:" + f(i));  
      }
   } 
   public static int f(int x) { 
    if (x == 1 || x == 2)    {   
      return 1; 
       } else {  
        return f(x - 1) + f(x - 2);  
       }
    }
}

2.汉诺塔
要求: 有三根杆子X,Y,Z。X杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至Y杆:

(1)每次只能移动一个圆盘;

(2)大盘不能叠在小盘上面。

递归逻辑:
当A塔上有n个盘子是,先将A塔上编号1至n-1的盘子(共n-1个)移动到B塔上(借助C塔),然后将A塔上最大的n号盘子移动到C塔上,最后将B塔上的n-1个盘子借助A塔移动到C塔上。(除了只有一个盘子时不需要借助其他塔外,其余情况均一样)

public class Demo {    
 public static void move(int n, char from, char inter, char to) {        
  if (n == 1) {           
     System.out.println("从" + from + " 移动" + n+ " 号到" + to);        
          } else {            
         move(n - 1, from, to, inter);          
     System.out.println("从" + from + " 移动" + n+ " 号到" + to); 
         move(n - 1, inter, from, to);                                   
         }    
  }   
    public static void main(String[] args) {       
      int num = 3;       
      move(num, 'A', 'B', 'C');   
    
      }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值