【已解决】帮忙看下这个简单的递归函数
本帖最后由 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,不知道什么原因? 本来想测试下简单的递归算法,但是返回值并不是预想中的10,而是2,不知道什么原因?
ScriptFans 发表于 2016-2-15 19:32 http://www.autoitx.com/images/common/back.gif
MsgBox(0, '', test(1))
Func test($i)
If ($i >= 10) Then Return $i ; 递归终止条件
Return test($i + 1)
EndFunc
本帖最后由 ScriptFans 于 2016-2-15 20:44 编辑
明白了,得在终止的同时返回函数值,感谢感谢!!
$i >= 10可改成$i = 10
顺便问下这种有高亮显示的代码是怎么发的? 明白了,得在终止的同时返回函数值,感谢感谢!!
$i >= 10可改成$i = 10
顺便问下这种有高亮显示的代 ...
ScriptFans 发表于 2016-2-15 20:26 http://www.autoitx.com/images/common/back.gif
au3 code
楼主的代码问题在于,递归的时候没有返回值,那么最外层的函数和参数的值相当于没有参加递归的累计计算。也就是说If $parameter<=10 Then test($parameter) 这一句没有实际意义,只是循环了9次,但是没有返回值,那么相当于没有。
改成If $parameter < 10 Then Return test($parameter),有返回值之后,就是递归计算了,返回值应该是11。 MsgBox(0, "", test(1))
Func test($parameter)
$parameter += 1
If $parameter <= 10 Then
Return test($parameter)
Else
Return $parameter
EndIf
EndFunc ;== 非常感谢楼上两位的解答! 及时编辑标题,添加“已解决”,养成良好的提问习惯。
页:
[1]