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

前言

说起来,我写这个系列的文章,与其说的技术文,不如说是就是自己再复习上课讲过的内容,这些题做了也有一段时间了,在复习的同时,分享一下自己的成长与学习足迹,嘛,说不定也是一代大佬的成长之路。
这次还是递归,上一篇用单个例子,这一篇就把自己做过的所有题都放上来,相对还是挺简单的,据说面试喜欢考这个?不过代码量确实是比较少的,可以了解一下。最后面也会附上一道深度的题目。
注:题目来自我们亲爱老班的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当做输出结果。注意放在调用该方法下方输出,在递归进入最里的临界值时,若符合条件会输出,这样就能显示上面输出样例需要的格式。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 3,508评论 0 19
  • 画一下Java的集合collectionjava.util和并发集合java.util.concurrent的关系...
    chenfh5阅读 491评论 1 0
  • 上一章:第二章之投石问路,波澜不惊 “够了!他为你杀的人已经够让前仇旧恨一笔勾销了吧,纵使他有多对不住我们家,但看...
    晋元阅读 470评论 0 0
  • 阑珊下 一串灯火 道路的前方被照耀 树木却依旧 蝴蝶在作响 只是那一束灯火 依旧是一束灯火 树木没有远走 蝴蝶仍在...
    何婉玲阅读 153评论 2 6

友情链接更多精彩内容