Board logo

标题: [小问题]call递归? [打印本页]

作者: plp626     时间: 2008-9-5 17:39    标题: [小问题]call递归?

call:子过程(不是批处理)
和函数有本质区别吗?


怎么用call递归?
作者: huahua0919     时间: 2008-9-5 18:22
CALL 的用法

   一般情况下我们调用函数的时候直接就写函数名,便能够执行函数的内容。但是当要调用一个函数并且传递一个参数到这个函数中时就得用call了,如下程序:
CODE:  [Copy to clipboard]
               Dim a,b                                                                              
               Function FunctionTest                           '定义一个名为FunctionTest的函数      
                   Msgbox "This is a test!"                                                         
               End Function                                                                       
               FunctionTest                                   '直接写函数名的方式调用函数           
               Function AnotherFunctionTest(a,b)                '再定义一个函数,并且接受两个参数     
                    Msgbox a&b                                                                    
               End Function                                                                        
               Call AnotherFunctionTest("This is a","another test") '用call调用函数并且传递两个参数值  
Note: 其实不论您调用的函数有没有参数都可以加上call,比如上面的程序还可以call FunctionTest,但是有参数传递的时候一定要加上call
作者: lxmxn     时间: 2008-9-5 19:51


  Quote:
Originally posted by huahua0919 at 2008-9-5 18:22:
CALL 的用法

   一般情况下我们调用函数的时候直接就写函数名,便能够执行函数的内容。但是当要调用一个函数并且传递一个参数到这个函数中时就得用call了 ...

非要加上 call 才能带参调用函数吗?
作者: huahua0919     时间: 2008-9-5 19:57
我个人认为任何语言调用参数都在括号中最好,这样直观!而且也符合程序编写标准.
约束一种自由行为!那样别人看了会不知所措.
作者: lxmxn     时间: 2008-9-6 01:48


  Quote:
Originally posted by huahua0919 at 2008-9-5 19:57:
我个人认为任何语言调用参数都在括号中最好,这样直观!而且也符合程序编写标准.
约束一种自由行为!那样别人看了会不知所措.

这个只是个人习惯问题吧,有的语言不带括号也好用,比如 perl 。
作者: plp626     时间: 2008-9-6 09:46
大家可能有点误解
我说call:标签(不是P处理文件)讨论范围还是P处理脚本的。
大家都知道C 语言递规很方便,拿这个例子:算阶乘(为了便于表达,我仅是举例子)
CODE:  [Copy to clipboard]
fun(int n)
if (n==1||n==0) c=1
else c=n*fun(n-1)
return c
但我发现这句c=n*fun(n-1)在批处理中还是不容易实现。
作者: plp626     时间: 2008-9-6 10:15
CODE:  [Copy to clipboard]
@echo off||plp626@cn-dos.net&setlocal enabledelayedexpansion

call:x 5
echo %x%
pause
:x
if %1.==1. (set c=1) else (
set/a c=%1-1
call:x !c! x
exit/b
set %2=!c!
call set/a x=%1*!!x!!
)
exit/b&set %2=!c!
大家帮改改。。。。
作者: slore     时间: 2008-9-6 13:19
子过程和函数得区别是:一个有返回值一个没有。那个有我想谁都知道吧?

过程可以用参数得到返回值,或者全局变量实现。

递归用全局得话不合适得全局变量组了,麻烦。所以只好用第一个参数传递。
CODE:  [Copy to clipboard]
@echo off&title 阶乘计算 By Slore
Set/p x=请输入一个整数:
Call :Sub_F %x% 1
pause

:Sub_F
if %1==1 echo %2&goto :End_F
set/a out=%1*%2,n=%1-1
Call :Sub_F %n% %out%
:End_F
[ Last edited by slore on 2008-9-6 at 01:25 PM ]
作者: plp626     时间: 2008-9-10 16:36


  Quote:
Originally posted by slore at 2008-9-6 01:19 PM:
子过程和函数得区别是:一个有返回值一个没有。那个有我想谁都知道吧?

过程可以用参数得到返回值,或者全局变量实现。

递归用全局得话不 ...

学习了,我想得太复杂。




欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) Powered by Discuz! 2.5