搜索

一道简单递归程序设计的题目(最好用java来描述)

gecimao 发表于 2019-08-14 01:13 | 查看: | 回复:

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  自己在eclipse里给你敲的。楼上的答非所谓,别人是要递归的,你来个双重循环的答案。

  根据你提供的资料,所以用的是字符数组,当然其他数组也行的,只是修改下方法体就好了。

  至于aa(String[] s,int k,ListString list)的参数给你讲一下,数组s就是你要进行递归的数组,k默认传入0表示进行第一次递归,k+1就应该能明白了吧,list用来存放中间生成的数据。其他的就没什么好说的了,相信应该能看懂的。

  递归方法主要就是这个aa()方法,那个main方法里的是测试用的。这个递归的依据是,从一个字符数组的第一个(index)元素开始,依次与后面的元素合并,然后index+1的元素再依次与后面的元素合并,依次类推直到倒数第二个元素,因为最后一个元素的后面已经没有元素了,那么它就不再进行递归了,也就是说当递归到倒数第二个元素的时候,就递归结束,这也是递归的结束条件。所以在aa()一定会有一个if...else进行结束条件的判断,这里的if(len-k-1=1)里就是递归结束的返回判断,如果你觉得看起或者理解不方便可以写成这样if(len-k=2),k是用来标识当前进行递归的元素的位置,所以每次递归后都会进行k+1,所以当len-k=2时表示当前进行递归的位置已经是递归结束的标志了,这里特别注意的是为什么if里还有两个if...else,假如你传的数组只有一个元素或者是空数组,那么也要进行相应的处理。那么对递归的结束条件进行了正确的判定后,就是递归的主体了,这里的主体就在第一个if...else的else里。可以看到for循环是在对s[k]位置的元素依次与后面的元素进行合并,然后存入一个list里保存,当对k位置的元素合并完了后,是不是该再对k+1位置的进行合并了呢。你会发现对k+1位置的元素与后面元素合并的过程与k位置的是一模一样,那么是不是再调用一次方法自身来实现是不是就很省事了,所以for循环结束完了,就调用方法aa(s,k+1,list),这样s[k]的下一个元素s[k+1]不就自己处理完成了吗,然后在aa(s,k+1,list)里,如果满足不了递归结束条件,那么aa()就会一直调用下去知道满足条件停止递归。

本文链接:http://windsorflowers.net/diguilicheng/442.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部