只使用全局变量的递归



为了简单起见,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

注意:这是我刚刚写的,可能有错误。
你看这张照片。我正在手动创建一个堆栈,并使用它来模拟局部变量,并将其用于递归。

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

我认为你必须借助于全局变量在SmallBasic中编写递归函数。

我同意SmallBasic缺乏函数参数是相当有限的,并且经常使本应简单的编程语言在实践中使用起来相当复杂。

SmallBasic的库对于初学者来说是很棒的,比起像WinForms或WPF这样的企业框架,把东西放到屏幕上要容易得多。这个库SmallBasicLibrary.dll可以很容易地加载到其他。net语言中,包括VB。Net, c#和f#。只需创建一个控制台应用程序并向库添加一个引用,然后对library名称空间使用import/using/open。

当我教我的孩子们编程时,我从SmallBasic开始,他们喜欢Turtle的功能,但很快就切换到f#,它对函数有一流的支持,与VB相比,仪式少得多。Net或c#。在他们可以打印"Hello World"之前,必须向一个70岁的人解释public static void Main,这对我来说不是一个有吸引力的选择。

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

我认为值得注意的是,以这种方式创建递归函数-即仅使用全局变量,使用堆栈-本身就非常有教育意义。这更接近于汇编的工作方式,所以从这个角度来看,必须以这种方式做事实际上可以被认为是一个功能…

相关内容

  • 没有找到相关文章

最新更新