楼主: Mutually_Sincer
2493 4

[问答] 关于R中递归函数的一点疑问 [推广有奖]

  • 4关注
  • 10粉丝

已卖:56份资源

博士生

89%

还不是VIP/贵宾

-

威望
0
论坛币
6969 个
通用积分
13.9949
学术水平
11 点
热心指数
15 点
信用等级
4 点
经验
4658 点
帖子
204
精华
0
在线时间
357 小时
注册时间
2014-11-4
最后登录
2024-12-13

楼主
Mutually_Sincer 学生认证  发表于 2016-4-13 20:37:34 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
如题,我在编程时遇到了需要用递归函数的地方,但是对递归函数的运行机理不是十分清楚,现在举一个简单的例子来说明我遇到的疑问:
  1. exper<-function(a,b){
  2.   aa<-(a-b)
  3.   print(aa)
  4.   if(aa>=0)  exper(aa,b)
  5. }
复制代码
上述代码定义了一个函数exper,在参数值分别为10,3时,结果如下:
  1. > exper(10,3)
  2. [1] 7
  3. [1] 4
  4. [1] 1
  5. [1] -2
复制代码
这不难理解,而且说明7,4,1,-2是按照产生的先后顺序反向排列的,亦即先产生的在上面。若将代码改成:
  1. exper<-function(a,b){
  2.   aa<-(a-b)
  3.   if(aa>=0)  exper(aa,b)
  4.   print(aa)
  5. }
复制代码
还是选择同样的参数值,那么结果是:
  1. > exper(10,3)
  2. [1] -2
  3. [1] 1
  4. [1] 4
  5. [1] 7
复制代码
我想弄明白的是,当aa第一次的取值为7时,满足if的条件,此时应该进行下一次的exper循环,这个时候会不会执行“print(aa)"?若是执行的话,那么第一次的aa输出值为7,按照更改前的理解,从上到下应该是”7,4,1,-2“才对。若是不执行,那么应该只有最后一次迭代的结果-2作为输出值。
二维码

扫码加我 拉你入群

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

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

关键词:print EXP int

wanna be a stargazer

沙发
Mutually_Sincer 学生认证  发表于 2016-4-13 20:38:20
求解答~~~

藤椅
毓闻 学生认证  发表于 2016-4-14 01:39:33

最内层调用的时候aa=-2所以if语句不能通过这个时候就执行下一个语句print(aa),所以就先打印出-2,然后这层调用执行结束退到上层调用依次打印1,4,7.

已有 1 人评分论坛币 收起 理由
jiangbeilu + 10 鼓励积极发帖讨论

总评分: 论坛币 + 10   查看全部评分

板凳
Mutually_Sincer 学生认证  发表于 2016-4-14 09:02:13
毓闻 发表于 2016-4-14 01:39
最内层调用的时候aa=-2所以if语句不能通过这个时候就执行下一个语句print(aa),所以就先打印出-2,然后这层调 ...
也就是说,递归函数在递归条件不满足时会返回上一次运算?可是为什么会返回上一次运算呢?直接输出aa的值不就可以结束了么?

报纸
Mutually_Sincer 学生认证  发表于 2016-4-14 19:10:00
好吧,看来这就是递归函数的运行机理了,执行完最后一行之后没有可以执行的操作了于是就返回递归的上一层执行print(aa)。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-27 04:23