首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只使用全局变量的递归

只使用全局变量的递归
EN

Stack Overflow用户
提问于 2014-06-17 06:25:31
回答 2查看 340关注 0票数 2

为了简单起见,Smallbasic只有全局变量。它没有局部变量或参数。

尽管这使得教或学它变得更简单,但它也使一些事情复杂化,比如递归函数。我很难在smallbasic中创建一个简单的递归函数,并且不得不使用手动堆栈。这是可行的,但它使它更复杂,并与最初的主要目标简单!

这就是我如何编写阶乘的方法:

代码语言:javascript
复制
n = 5
ind = 1
fact()
TextWindow.WriteLine("fact(5)=" + f)

Sub fact
  If n = 1 Then
    f = 1
  Else
    ind = ind+1
    keepn[ind] = n
    n = n-1
    fact()
    f = f * keepn[ind]
    ind = ind-1
  EndIf
EndSub

注意:我刚才写的,它可能有错误。

你看到照片了。我正在手动创建一个堆栈,并使用它模拟局部变量,并使用它进行递归。

是否有一种简单的方法来创建这个递归函数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-18 17:33:51

我认为您必须使用全局变量来编写SmallBasic中的递归函数。

我同意SmallBasic缺乏函数参数是非常有限的,并且常常使一种被认为是简单的编程语言在实践中的使用相当复杂。

然而,SmallBasic的库对于初学者来说是很好的,这使得在屏幕上放置东西比WinForms或WPF这样的企业框架要容易得多。库SmallBasicLibrary.dll可以轻松地加载到其他.Net语言中,包括VB.Net、C#和F#。只需创建一个控制台应用程序并添加对库的引用,然后对library命名空间使用导入/使用/打开。

当我教我的孩子编程时,我从SmallBasic开始,他们喜欢Turtle的功能,但很快就转向了F#,它对函数有一流的支持,与VB.Net或C#相比,它的仪式要少得多。在他们印刷"Hello“之前,必须先向一个7溜溜球解释一下public static void Main,这对我来说不是一个有吸引力的选择。

作为一个实验,我还创建了另一个SmallBasic编译器实现,您可能会发现它很有趣,因为它包括对函数参数元组与模式匹配的支持。

票数 2
EN

Stack Overflow用户

发布于 2016-02-08 19:22:17

我认为值得注意的是,以这种方式创建递归函数--即只使用全局变量,使用堆栈--本身是很有教育意义的。这更接近于组装的工作方式,因此从这个角度来看,必须这样做实际上可以被认为是一项功能.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24256997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档