找回密码
 加入
搜索
查看: 2840|回复: 7

[效率算法] 【已解决】帮忙看下这个简单的递归函数

  [复制链接]
发表于 2016-2-15 19:32:03 | 显示全部楼层 |阅读模式
本帖最后由 ScriptFans 于 2016-2-17 00:27 编辑
MsgBox(0,"",test(1))

Func test($parameter)
    ;MsgBox(0,"",$parameter)
    $parameter+=1
    If $parameter<=10 Then test($parameter)
    Return $parameter
EndFunc
本来想测试下简单的递归算法,但是返回值并不是预想中的10,而是2,不知道什么原因?
发表于 2016-2-15 20:19:04 | 显示全部楼层
本来想测试下简单的递归算法,但是返回值并不是预想中的10,而是2,不知道什么原因?
ScriptFans 发表于 2016-2-15 19:32




MsgBox(0, '', test(1))

Func test($i)
        If ($i >= 10) Then Return $i        ; 递归终止条件
        Return test($i + 1)
EndFunc

评分

参与人数 2金钱 +20 收起 理由
ScriptFans + 10 感谢!
lpxx + 10 好的代码总是简单粗暴

查看全部评分

 楼主| 发表于 2016-2-15 20:26:56 | 显示全部楼层
本帖最后由 ScriptFans 于 2016-2-15 20:44 编辑

明白了,得在终止的同时返回函数值,感谢感谢!!
$i >= 10  可改成  $i = 10
顺便问下这种有高亮显示的代码是怎么发的?
发表于 2016-2-15 21:16:58 | 显示全部楼层
明白了,得在终止的同时返回函数值,感谢感谢!!
$i >= 10  可改成  $i = 10
顺便问下这种有高亮显示的代 ...
ScriptFans 发表于 2016-2-15 20:26
[au3]
au3 code
[/au3]

评分

参与人数 1金钱 +10 收起 理由
ScriptFans + 10 谢了!

查看全部评分

发表于 2016-2-16 11:25:26 | 显示全部楼层
楼主的代码问题在于,递归的时候没有返回值,那么最外层的函数和参数的值相当于没有参加递归的累计计算。也就是说If $parameter<=10 Then test($parameter) 这一句没有实际意义,只是循环了9次,但是没有返回值,那么相当于没有。
改成If $parameter < 10 Then Return test($parameter),有返回值之后,就是递归计算了,返回值应该是11。
发表于 2016-2-16 20:32:46 | 显示全部楼层
MsgBox(0, "", test(1))

Func test($parameter)
        $parameter += 1
        If $parameter <= 10 Then
                Return test($parameter)
        Else
                Return $parameter
        EndIf
EndFunc   ;==
 楼主| 发表于 2016-2-16 23:38:50 | 显示全部楼层
非常感谢楼上两位的解答!
发表于 2016-2-16 23:57:39 | 显示全部楼层
及时编辑标题,添加“已解决”,养成良好的提问习惯。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-26 11:31 , Processed in 0.078020 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表