常用递归算法解决的问题

9 篇文章 1 订阅

常用递归算法解决的问题

概述

  这里记录一下常用递归算法解决的一些问题。掌握好递归算法就是要注意两个问题,第一个是先写递归出口即终止条件,然后才是自身函数的调用。当然在这中间或者末尾可以有其它的一些处理逻辑,比如打印之类的函数。

阶乘

  所谓阶乘,就是n! = n*(n-1)*...*2*1,示范代码如下。

// java


public static int factorial(int n) {
    if (n == 1)
        return 1;
    return n * factorial(n-1);
}

斐波那契数列

  第一项和第二项都是 1 ,然后从第三项开始依次是前两项的和,其递归代码如下。

// java


public static int fibonacci(int n) {
    if (n == 1 || n == 2)
        return 1;
    return fibonacci(n-1) + fibonacci(n-2);
}

汉诺塔

  汉诺塔的故事来源有很多,大家感兴趣可以百度一下。简单说来就是有 3 根柱子A,B,C,A 柱子上由上至下依次由小至大排列的圆盘。我们需要把 A 柱子上的圆盘借 B 柱子全部移动到 C 柱子上,并且移动的过程始终是小的圆盘在上,大的在下,一次只能移动一个圆盘。

// java

// n 表示起始 A 上的圆盘个数,A B C 表示三个柱子
// 这样传参表明将 A 柱子上的 n 个圆盘借助 B 移动到 C 上
public static void hanoi(int n, char A, char B, char C) {
	// n == 1 直接 A --> C
    if (n == 1) {
        System.out.println(A + " --> " + C);
        return;
    }
    // 将 A 柱子上的 n-1 圆盘借助 C 移动到 B 上
    hanoi(n-1, A, C, B);
    // 移动 A 上剩下的一个圆盘到 C 上
    System.out.println(A + " --> " + C);
    // 将 B 柱子上的 n-1 圆盘借助 A 移动到 C 上
    hanoi(n-1, B, A, C);
}

总结

不忘初心,砥砺前行!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值