| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2750 人关注过本帖
标题:新手请教:这段程序中x怎么会等于10,是从s=s(n-1)+n这公式计算出的?怎么算 ...
只看楼主 加入收藏
zh99ja
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-4-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
新手请教:这段程序中x怎么会等于10,是从s=s(n-1)+n这公式计算出的?怎么算出的没搞懂?
Function s(n As Integer) As Integer
If n = 1 Then
s = 1
Else
s = s(n - 1) + n
 End If
End Function

Private Sub form_click()
Dim x As Integer
x = s(4)
Print x
End Sub

正确答案是:x=10

而对于我这个生手,真有点不太清楚这程序的计算过程?求高手指教,谢谢了!
搜索更多相关主题的帖子: End Integer 公式 等于 计算 
2020-05-10 08:28
zh99ja
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-4-20
收藏
得分:0 
仿佛这段程序中的if then endif是个循环程序,循环从n=4至n=1终止,但if只是个条件语句不是循环语句,是谁在让它循环?
2020-05-10 09:30
zh99ja
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-4-20
收藏
得分:0 
如果循环真的进行了
n从4至1,我试着列出相应的s=s(n-1)+n的公式如下:
当n=4时,s=s(3)+4
当n=3时,s=s(2)+3
当n=2时,s=s(1)+2
当n=1时,s=s(0)+1,当然此时已经在条件中直接是n=1 then s=1 了。
但上面的左边的s值是多少是怎么算出来的?
在程序中插入打印,上面的n=4,3,2,1时相应的x=s(n)从上而下是10,6,3,1,其中10就是正确答案。
但确实不知道怎样得出的???
2020-05-10 09:45
zh99ja
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-4-20
收藏
得分:0 
这个试题是我无意查VB程序时碰到的,具体那个网站忘记了,有四个选择,最后一个就是10,自己琢磨了半天没猜出来,只好写下程序在vb6上运行,单击窗体就出现10,所以我估计10应该就是正确答案。
2020-05-10 10:03
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:10 
s  函数是一个递归,自己调用自己,那就是一循环了。
s(4)
先调用 s=s(3)+4
这时,s(3)又继续调用 s=s(2)+3
然后,发现s(2)又得再次调用 s=S(1)+2
然后,继续发现 s(1)又得调用 s=1
然后依次返回给上面一层的调用结果
最终
每步得到的结果是:
1
3
6
10
输出最终结果:10

实际上,就是依次扩展算式
x=1+2+3+4



授人于鱼,不如授人于渔
早已停用QQ了
2020-05-10 10:59
HVB6
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:15
帖 子:331
专家分:561
注 册:2013-10-30
收藏
得分:10 
此程序是“递归”,即“1+2+3+4=10”,改一处“s = s(n - 1) + n”为“s = s(n - 1) *n”,则为n!
Function s(n As Integer) As Integer
If n = 1 Then
s = 1
Else
's = s(n - 1) + n
s = s(n - 1) *n
 End If
End Function

Private Sub form_click()
Dim x As Integer
x = s(4)
Print x
End Sub
2020-05-10 11:35
zh99ja
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-4-20
收藏
得分:0 
谢谢,有点启发了,由于自己是生手,但要完全懂你说的这依次扩展算式,包括其中的“函数是一个递归,自己调用自己”的内容可能还得多学习实践下,有点惭愧,见笑了,容我再慢慢体会你说明的内容,再次谢了!
2020-05-10 11:39
zh99ja
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-4-20
收藏
得分:0 
刚才回到原输入的程序中,按你上面提到的将s = s(n - 1) + n改为s = s(n - 1) *n,应该就是N!阶乘的递归吧,试运行一下,也能输出x=s(4)结果,不过不是10而变成24了,一边学一边试,能有点长进。
2020-05-10 14:19
zh99ja
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-4-20
收藏
得分:0 
也学到一点,这个递归的控制终止在于if n=多少的设置,将原程序中n=1改为n=-10,那递归将在n从4减一一直到n=-10,在s = s(n - 1) + n中还能进行下去,但在改为s = s(n - 1) *n的阶乘递归后,到n=-10时,程序提示 :溢出了,至于相应条件语句中if n=多少时的s对应值也要根据需要变动,否则这个程序中的结果x=s(4)的原来的10会变的说不清楚了。。。
2020-05-10 14:48
zh99ja
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-4-20
收藏
得分:0 
有一个问题?如果程序中是写的s(n)=s(n-1)+n,那好像这递归调用自己看起来就比较明显,要是按程序中的s=s(n-1)+n就好像这个s与s()不是一类数?
这s(n)=s(n-1)+n和s=s(n-1)+n在递归上有区别吗?还是vb中规定就是一样的?
2020-05-12 11:15
快速回复:新手请教:这段程序中x怎么会等于10,是从s=s(n-1)+n这公式计算出的? ...
数据加载中...
 
   



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

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