楼主: jackylee2010
2862 4

[问答] 讨论一个递归的小程序 [推广有奖]

  • 1关注
  • 13粉丝

已卖:152份资源

教授

46%

还不是VIP/贵宾

-

威望
0
论坛币
3341 个
通用积分
14.5414
学术水平
22 点
热心指数
31 点
信用等级
15 点
经验
2020 点
帖子
626
精华
0
在线时间
1878 小时
注册时间
2010-9-6
最后登录
2020-4-1

楼主
jackylee2010 发表于 2015-4-4 10:15:51 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
小弟在学习 r语言编程艺术的时候,
遇到一个递归的问题。在书中p148页
程序是用来排序的,很简单。

qs<-function(x){

        if(length(x)<=1) return(x)

        pivot<-x[1]

        therest<-x[-1]

        sv1<-therest[therest<piot]

        sv2<-therest[therest>=piot]

        sv1<-qs(sv1)

        sv2<-qs(sv2)

        return(c(sv1,pivot,sv2))

}


里面递归了qs函数。

我有一点看不明白。 r 语言应该是每递归一次,就出一个return(c(sv1,pivot,sv2)) 吧。不然的,

就得不到最后的结果了。因为每一次递归应该会出现pivot.



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:小程序 R语言编程艺术 R语言编程 语言编程 R语言 程序

沙发
毓闻 学生认证  发表于 2015-4-4 10:29:34
这是一个实现快速排序的程序,只要了解了快速排序的算法,理解起来应该没有问题
http://zh.wikipedia.org/wiki/快速排序
已有 1 人评分论坛币 学术水平 热心指数 收起 理由
jackylee2010 + 5 + 4 + 4 精彩帖子

总评分: 论坛币 + 5  学术水平 + 4  热心指数 + 4   查看全部评分

藤椅
jackylee2010 发表于 2015-4-4 10:32:48
毓闻 发表于 2015-4-4 10:29
这是一个实现快速排序的程序,只要了解了快速排序的算法,理解起来应该没有问题
http://zh.wikipedia.org/ ...
我的意思,递归的思路应该是 每递归一次,都应该 return一下结果吧。
如果时递归完,再给出最后的结果就不对了

板凳
毓闻 学生认证  发表于 2015-4-4 12:37:08
jackylee2010 发表于 2015-4-4 10:32
我的意思,递归的思路应该是 每递归一次,都应该 return一下结果吧。
如果时递归完,再给出最后的结果就 ...
举个简单例子,对 (4, 2, 5, 1, 3) 排序。
第1次调用qs()函数时,pivot = 4, SV1 = (2, 1, 3), SV2 = (5).
     这时对SV1 = (2, 1, 3)调用qs()函数,pivot' = 2, SV1' = (1), SV2' = (3).
            再对SV1' = (1)调用qs()函数,因为长度为1,直接返回原值;
            同样的对SV2' = (3)调用qs()函数也返回原值。
     所以SV1 = qs(SV1)得到的结果就是SV1 = (SV1', pivot', SV2') = (1, 2, 3);
     SV2 = qs(SV2)很容易看出结果是SV2 = (5).
回到第1层调用,返回结果(SV1, pivot, SV2) = (1, 2, 3, 4, 5),得到正确排序。
已有 1 人评分论坛币 热心指数 信用等级 收起 理由
jackylee2010 + 5 + 4 + 4 精彩帖子

总评分: 论坛币 + 5  热心指数 + 4  信用等级 + 4   查看全部评分

报纸
jackylee2010 发表于 2015-4-4 16:46:33
get it.
3Q.

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-16 03:03