ScriptFans 发表于 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,不知道什么原因?

nmgwddj 发表于 2016-2-15 20:19:04

本来想测试下简单的递归算法,但是返回值并不是预想中的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:26:56

本帖最后由 ScriptFans 于 2016-2-15 20:44 编辑

明白了,得在终止的同时返回函数值,感谢感谢!!
$i >= 10可改成$i = 10
顺便问下这种有高亮显示的代码是怎么发的?

nmgwddj 发表于 2016-2-15 21:16:58

明白了,得在终止的同时返回函数值,感谢感谢!!
$i >= 10可改成$i = 10
顺便问下这种有高亮显示的代 ...
ScriptFans 发表于 2016-2-15 20:26 http://www.autoitx.com/images/common/back.gif

au3 code

haijie1223 发表于 2016-2-16 11:25:26

楼主的代码问题在于,递归的时候没有返回值,那么最外层的函数和参数的值相当于没有参加递归的累计计算。也就是说If $parameter<=10 Then test($parameter) 这一句没有实际意义,只是循环了9次,但是没有返回值,那么相当于没有。
改成If $parameter < 10 Then Return test($parameter),有返回值之后,就是递归计算了,返回值应该是11。

h20040606 发表于 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   ;==

ScriptFans 发表于 2016-2-16 23:38:50

非常感谢楼上两位的解答!

afan 发表于 2016-2-16 23:57:39

及时编辑标题,添加“已解决”,养成良好的提问习惯。
页: [1]
查看完整版本: 【已解决】帮忙看下这个简单的递归函数