仅使用全局变量的递归

时间:2014-06-17 06:25:32

标签: recursion global-variables smallbasic

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

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

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

2 个答案:

答案 0 :(得分:2)

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

我同意SmallBasic缺乏功能参数是非常有限的,并且经常使一种所谓的简单编程语言在实践中使用起来非常复杂。

然而,SmallBasic的库非常适合初学者,因此比WinForms或WPF等企业框架更容易将内容放在屏幕上。该库SmallBasicLibrary.dll可以轻松加载到其他.Net语言中,包括VB.Net,C#和F#。只需创建一个控制台应用程序并添加对库的引用,然后对Library命名空间使用import / using / open。

在教我的孩子编程时,我开始使用SmallBasic,他们喜欢Turtle功能,但后来很快切换到F#,与VB.Net或C#相比,它具有一流的功能支持和更少的仪式。在他们打印之前必须向{7}解释public static void Main" Hello World"对我来说,这不是一个有吸引力的选择。

作为一项实验,我还创建了另一种SmallBasic compiler实施方案,您可能会感兴趣,因为它包含对function argumentstuples and pattern matching的支持。

答案 1 :(得分:1)

我认为值得注意的是,以这种方式创建递归函数 - 即只使用全局变量,使用堆栈 - 本身就具有很强的教育意义。这更接近装配的工作方式,所以从这个角度来看,这种方式实际上可以被认为是一个特征......