如何写出递归逻辑

作者: pgydbh | 来源:发表于2020-01-22 10:44 被阅读0次

前言

一次交流中被问到如何实现一组数字的全排列,比如【1,2,3】有多少种排列组合方式,如果拓展到【1,2,3,4,5】呢?

回顾

1.由于【1,2,3】有6种排列组合方式 1 * 2 * 3 = 6
2.得到【1,2,3,4,5】有 1 * 2 * 3 * 4 * 5 = 120 种组合方式
3.想到曾经在学习时总是接触到排列,想到用代码去实现,于是很感兴趣,对此问题感觉与其他问题不同,
4.直觉确定需要写成递归逻辑,但是如何直接写入一个递归函数???
5.想到过去总是写树的遍历,实时上这种代码都是背下来的,如何写入一个递归函数。

for

import kotlin.collections.ArrayList

fun main() {

    val list = arrayListOf(1, 2, 3, 4)

    for (i in 0..3) {
        swap(0, i, list)
        for (j in 1..3) {
            swap(1, j, list)
            for (k in 2..3) {
                swap(2, k, list)
                printlnList(list)
                swap(k, 2, list)
            }
            swap(j, 1, list)
        }
        swap(i, 0, list)
    }
}

fun swap(a: Int, b: Int, c: ArrayList<Int>) {
    val temp = c[a]
    c[a] = c[b]
    c[b] = temp
}

fun printlnList(c: ArrayList<Int>) {
    for (a in c) {
        print("$a ")
    }
    print("\n")
}

递归

import kotlin.collections.ArrayList

fun main() {

    val list = arrayListOf(1, 2, 3, 4)

    test1(0, 3, list)
}

fun test1(start: Int, end: Int, list: ArrayList<Int>) {
    if (start + 1 == end) {
        for (i in start..end) {
            swap(start, i, list)
            printlnList(list)
            swap(i, start, list)
        }
        return
    }
    for (i in start..end) {
        swap(start, i, list)
        test1(start + 1, end, list)
        swap(i, start, list)
    }
}

回顾

此时有些想起动态规划,曾经一直觉得递归函数很难实现,很多复杂递归函数也看不懂。我的理解,递归函数本就是计算机语言,更适合计算机去理解,而我们需要做的就是写出for循环的demo,转换它为递归,至于理解递归,需要做的只是有能力写出对的for循环解决问题。理解转换后的递归麻烦且只强行记忆。

相关文章

  • 如何写出递归逻辑

    前言 一次交流中被问到如何实现一组数字的全排列,比如【1,2,3】有多少种排列组合方式,如果拓展到【1,2,3,4...

  • 算法 递归 二叉树

    【递归底层运行逻辑】

  • 05-什么是递归

    递归,方法内部调用方法自身 递归的注意事项: 找到规律,就是写出递归公式 找到出口(边界值),就是结束递归的条件 ...

  • 第十节-递归

    这节课的思路主要是如何理解递归 --> 递归的三个条件 --> 如何编写递归 --> 递归要注意的点 --> 怎么...

  • 学无止境(之七)

    第十课准时开播,还是袁老师主讲的“写出逻辑清晰的拆书稿,这个框架帮你搞定”。 第一部分:如何写出逻辑清晰的文章; ...

  • 递归与循环

    理论上,任何循环都可以重写为递归形式。有些语言没有循环语句,只能使用递归。 循环改递归 改为递归的关键是发现逻辑“...

  • 数据结构与算法二:认识O(NlogN)的排序

    1、递归算法 用递归算法求数组 arr[] 中的最大值 N程序实现: 递归逻辑图解如下图所示: 2、归并排序 归并...

  • 懂了这些,你也能写出有吸引力的文章

    常听说,好多人喜欢习作,却不知如何写出有吸引力的文章。其实你只是没掌握写作技巧,不知行文的逻辑、不知如何写出...

  • 快速理解递归

    *数学归纳法理解 斐波那契数列 其他理解 写出递归函数也就是要处理好递归的3个主要的点:a)出口条件,即递归“什么...

  • 【每天来点python】递归函数

    学习网址:递归函数 注意重点: 递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但...

网友评论

    本文标题:如何写出递归逻辑

    本文链接:https://www.haomeiwen.com/subject/tkmuzctx.html