美文网首页
基础算法设计-递归篇(二)

基础算法设计-递归篇(二)

作者: 芥末芋头 | 来源:发表于2018-06-12 14:48 被阅读0次

前言

说起来,我写这个系列的文章,与其说的技术文,不如说是就是自己再复习上课讲过的内容,这些题做了也有一段时间了,在复习的同时,分享一下自己的成长与学习足迹,嘛,说不定也是一代大佬的成长之路。
这次还是递归,上一篇用单个例子,这一篇就把自己做过的所有题都放上来,相对还是挺简单的,据说面试喜欢考这个?不过代码量确实是比较少的,可以了解一下。最后面也会附上一道深度的题目。
注:题目来自我们亲爱老班的OJ,若觉有不妥之地请务必联系我,我可以立马收起来......

递归(助理解的简单例题)

例题一:

题目描述

给定数字n,n的半数序列集是(1)在 n 的右边加上一个自然数,但该自然数不能超过最近添加的数的一半,这样生了新的序列;(2)按此规则进行处理,直到不能再添加自然数为止。例如,4的半数序列集是{4,4 2,4 2 1,4 1}。

输入

一个整数 n,(0<n<=50)。

输出

按照数字降序,输出集合所有序列,每个序列一行,每个数字后面跟一个空格。

样例输入

6

样例输出

6 3 1
6 3
6 2 1
6 2
6 1
6

来源

[计科老班]

先说说自己一开始的想法。题目的意思比较明显,假设一个6,往后添加一个数是3(6/2=3>=3>0),之后这里6 3作为一个结果输出,然后上一次的数变为了3,那么往3后面加的数是1(3/2=1.5;1.5>=1>0);再看别的情况6后面符合条件的数还有2(6/2=3>=2>0),以此类推,最后结果 再加上自己本身。
上一章说到过,像这种重复去生成并判断一个数后面的数是否符合要求,可以用递归来实现,而且这题跟上一题还很相像,在递归方法中都需要一个循环去执行递归,原因是能填入第二个位置的数有多个,而在填入这个数之后又将执行下一次数的填入,依然是可能有多个的,加上上面的规律来看,不难判断出我们需要的循环次数为n/2(n为输入数据);
emmm,可能说的有些混乱,毕竟能把人说懂这种操作是非常高端的。没关系,文字之间我们可能没有联系,但是我相信代码可以成为我们沟通不错的桥梁。

正文

import java.util.ArrayList;

public class Hyj1476 {
    
    int[] result;
    int n;
    
    public Hyj1476(){
        n = 6;
        result = new int[n];
        result[0] = n;
        addNum(1,n);
        System.out.println(n);
    }
    
    public void addNum(int index,int max){
        for(int i=max/2;i>0;i--)
        {
            result[index] = i;
            addNum(index+1,i);
            for(int k=0;k<=index;k++)System.out.print(result[k]+" ");
            System.out.println();
        }
    }
    
    public static void main(String[] args){
        new Hyj1476();
    }
}

这里没有用if条件判断,而是直接在for循环之中输出并通过每次传进的i来判断是否到达临界条件,设置一个index下标,表示当前处于结果数组中的位置,这样当输出时就可以避免将数组后不需要的0当做输出结果。注意放在调用该方法下方输出,在递归进入最里的临界值时,若符合条件会输出,这样就能显示上面输出样例需要的格式。

相关文章

  • 基础算法设计-递归篇(二)

    前言 说起来,我写这个系列的文章,与其说的技术文,不如说是就是自己再复习上课讲过的内容,这些题做了也有一段时间了,...

  • 【dp笔记】动态规划解题一般思路

    课程笔记:程序设计与算法(二)算法基础:dp 递归到动规的一般转化方法 递归函数有n个参数就定义n维的数组 数组的...

  • 基础算法设计-递归篇(一)

    前言 作为一个大一大二还没有感觉当时学的数据结构以及操作系统多重要的人,在大三想找暑期实习的时候,总算是感觉到了紧...

  • 29.算法入门

    算法与数据结构基础 一、基础算法思想二分: 递推: 枚举: 递归: 分治: 贪心: 试探: 模拟: 二、简单数据结...

  • 动态规划

    ——主要参考了中国大学MOOC程序设计与算法(二)算法基础课程的内容 将一个问题分解为递归求解,并且将中间结果保存...

  • 递归算法设计

    递归是程序设计中一个很重要的课题。用递归技术设计的算法简单明了。递归算法的设计与分析是算法设计与分析的一大类。 首...

  • 二叉树遍历-JAVA实现

    基础二叉树 二叉树遍历分为前序、中序、后序递归和非递归遍历、还有层序遍历。 前序递归遍历算法:访问根结点-->递归...

  • 关于递归

    设计递归算法可以分为以下几个步骤 1.思考递归算法的循环过程。为什么需要递归,每次递归会产生什么结果?递归次数怎么...

  • 递归、回溯、分治

    递归 (1)子集 方式一:递归算法 方式二:位运算算法 (2)子集II 方法一:递归算法 方法二:位运算 (3)组...

  • 算法汇总

    关于算法: 基础技巧:分治、二分、贪心排序算法:快速排序、归并排序、计数排序搜索算法:回溯、递归、深度优先遍历,广...

网友评论

      本文标题:基础算法设计-递归篇(二)

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