| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 878 人关注过本帖
标题:递归调用求阶乘,请帮我看错在哪
只看楼主 加入收藏
liangwenbc
Rank: 3Rank: 3
来 自:广州
等 级:论坛游侠
帖 子:168
专家分:174
注 册:2008-6-11
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:10 
递归调用求阶乘,请帮我看错在哪
Public Sub km(N As Integer)
 Dim m As Integer
  If N > 1 Then
    m = N * km(N - 1)
 Else
    km(1) = 1
 End If
Print shr$(N) & "的阶乘是:" & Str$(m)
End Sub
Private Sub Form_Load()
Dim num As Integer
num = InputBox("enter a number from 0 to 20 or -1 to end:")
If num > 0 And num <= 20 Then
  km num
End If
End Sub
搜索更多相关主题的帖子: number 
2011-04-06 19:43
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:10 
Function km(N As Integer) As Integer
Dim m As Integer
m=1
If N > 1 Then
   m = N * km(N - 1) '要有返回值的话就要用Function
Else
   m = 1
End If
km=m
End Sub

Private Sub Form_Load()
Dim num As Integer
num = InputBox("enter a number from 0 to 20 or -1 to end:")
If num > 0 And num <= 20 Then
Print shr$(N) & "的阶乘是:" & Str(km(num))
End If
End Sub

   唯实惟新 至诚致志
2011-04-06 21:04
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4943
专家分:30047
注 册:2008-10-15
收藏
得分:10 
'N!   
 'Print N_jx(6)
 
'递归方式
 Public Function N_jx(cs As Long) As Double
 if cs<1 then
   exit function
 end if
 If cs = 1 Then
     N_jx = 1          '这里是返回值,左边不能用再带括号。带括号是引用。
 Else
     N_jx = cs * N_jx(cs - 1)
 End If
 End Function
'----上面是我前面回贴子时写的,下面是用你的改的--------
'我函数名与你的不同,这个无所谓,参数类型不同,我改你的定义。
Private Sub Form_Load()    '在这个事件中使用 PRINT 方法,就必须设置 自动重绘为 真,否则看不到结果。
 Dim num As string
dim num1 as long
 num = InputBox("enter a number from 0 to 20 or -1 to end:")
if isnumber(num) then  '判断输入是否为数字
   num1=clng(num)       '转化为长整数
 If num1 > 0 And num1 <= 20 Then        '判断范围
   print num1 ; " 的阶乘是:" ; N_jx(num1)         '如果使用 print 进行输出的话,建议使用分隔符进行连接各个输出内容,已节省系统开销。
 else   '不在范围提示
   print "输入的数据不在 0 - 20 这间。"
 end if
else    '不是数字时提示
   print "输入的不是数值"
end if
 End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2011-04-06 21:05
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
还有的话,当求20的阶乘的时候,Integer可能不够大,建议改大点的数据类型。

   唯实惟新 至诚致志
2011-04-06 21:05
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4943
专家分:30047
注 册:2008-10-15
收藏
得分:0 
晕,在网页里打字,就是慢。

我代码是直接在 编辑框里 输入的。

2楼 的提示你也要看。

授人于鱼,不如授人于渔
早已停用QQ了
2011-04-06 21:06
liangwenbc
Rank: 3Rank: 3
来 自:广州
等 级:论坛游侠
帖 子:168
专家分:174
注 册:2008-6-11
收藏
得分:0 
以下是引用风吹过b在2011-4-6 21:05:57的发言:

'N!   
 'Print N_jx(6)
  
'递归方式
 Public Function N_jx(cs As Long) As Double
 if cs<1 then  
   exit function
 end if
 If cs = 1 Then
     N_jx = 1          '这里是返回值,左边不能用再带括号。带括号是引用。
 Else
     N_jx = cs * N_jx(cs - 1)
 End If
 End Function
'----上面是我前面回贴子时写的,下面是用你的改的--------
'我函数名与你的不同,这个无所谓,参数类型不同,我改你的定义。
Private Sub Form_Load()    '在这个事件中使用 PRINT 方法,就必须设置 自动重绘为 真,否则看不到结果。
 Dim num As string
dim num1 as long  
 num = InputBox("enter a number from 0 to 20 or -1 to end:")
if isnumber(num) then  '判断输入是否为数字
   num1=clng(num)       '转化为长整数
 If num1 > 0 And num1 <= 20 Then        '判断范围
   print num1 ; " 的阶乘是:" ; N_jx(num1)         '如果使用 print 进行输出的话,建议使用分隔符进行连接各个输出内容,已节省系统开销。
 else   '不在范围提示
   print "输入的数据不在 0 - 20 这间。"
 end if
else    '不是数字时提示
   print "输入的不是数值"
end if
 End Sub
不能定义一个Sub通用过程吗,我定义的是Sub过程不是Function过程,我想定义一个Sub通用过程递归调用后直接在Sub通用过程中用Print输出结果

qq7434391
2011-04-06 22:14
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4943
专家分:30047
注 册:2008-10-15
收藏
得分:0 
我定义的是Sub过程不是Function过程,我想定义一个Sub通用过程递归调用后直接在Sub通用过程中用Print输出结果

不能。

因为 SUB 过程没有返回值,也就没办法递归调用。

如果你要定义为 SUB ,那就要使用 循环写。

Public Sub km(N As Integer)
 Dim m As Double
dim i as long
m=1
for i=1 to N
   m=m*i
next i

 Print shr$(N) & "的阶乘是:" & Str$(m)
 End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2011-04-06 22:52
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
收藏
得分:0 
以下是引用liangwenbc在2011-4-6 22:14:29的发言:

不能定义一个Sub通用过程吗,我定义的是Sub过程不是Function过程,我想定义一个Sub通用过程递归调用后直接在Sub通用过程中用Print输出结果

图片附件: 游客没有浏览图片的权限,请 登录注册

无知
2011-04-06 23:00
liangwenbc
Rank: 3Rank: 3
来 自:广州
等 级:论坛游侠
帖 子:168
专家分:174
注 册:2008-6-11
收藏
得分:0 
以下是引用风吹过b在2011-4-6 22:52:38的发言:

我定义的是Sub过程不是Function过程,我想定义一个Sub通用过程递归调用后直接在Sub通用过程中用Print输出结果  
 
不能。
 
因为 SUB 过程没有返回值,也就没办法递归调用。
 
如果你要定义为 SUB ,那就要使用 循环写。
 
Public Sub km(N As Integer)
 Dim m As Double  
dim i as long
m=1
for i=1 to N
   m=m*i
next i
 
 Print shr$(N) & "的阶乘是:" & Str$(m)
 End Sub
因为 SUB 过程没有返回值,也就没办法递归调用。
不是吧

qq7434391
2011-04-07 00:13
liangwenbc
Rank: 3Rank: 3
来 自:广州
等 级:论坛游侠
帖 子:168
专家分:174
注 册:2008-6-11
收藏
得分:0 
sub过程到最后当N=1时不能返回一个值是吧,懂了。谢谢大家

qq7434391
2011-04-07 00:26
快速回复:递归调用求阶乘,请帮我看错在哪
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013304 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved