为了简单起见,Smallbasic只有全局变量。它没有局部变量或参数。
尽管这使得教或学它变得更简单,但它也使一些事情复杂化,比如递归函数。我很难在smallbasic中创建一个简单的递归函数,并且不得不使用手动堆栈。这是可行的,但它使它更复杂,并与最初的主要目标简单!
这就是我如何编写阶乘的方法:
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注意:我刚才写的,它可能有错误。
你看到照片了。我正在手动创建一个堆栈,并使用它模拟局部变量,并使用它进行递归。
是否有一种简单的方法来创建这个递归函数?
发布于 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编译器实现,您可能会发现它很有趣,因为它包括对函数参数,元组与模式匹配的支持。
发布于 2016-02-08 19:22:17
我认为值得注意的是,以这种方式创建递归函数--即只使用全局变量,使用堆栈--本身是很有教育意义的。这更接近于组装的工作方式,因此从这个角度来看,必须这样做实际上可以被认为是一项功能.
https://stackoverflow.com/questions/24256997
复制相似问题