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

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

作者: 芥末芋头 | 来源:发表于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当做输出结果。注意放在调用该方法下方输出,在递归进入最里的临界值时,若符合条件会输出,这样就能显示上面输出样例需要的格式。

    相关文章

      网友评论

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

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