2014-06-17 102 views
2

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

我想你不得不求助于全局变量在SmallBasic中编写一个递归函数。

我同意SmallBasic缺乏函数参数是相当有限的,并且常常使得一个所谓简单的编程语言在实践中非常复杂。

SmallBasic的库对于初学者来说非常棒,它比起WinForms或WPF这样的企业框架更容易将东西放在屏幕上。该库SmallBasicLibrary.dll可以轻松加载到其他.Net语言,包括VB.Net,C#和F#。只需创建一个控制台应用程序并添加一个对库的引用,然后对库命名空间使用import/using/open。当我教我的孩子们编程时,我开始使用SmallBasic,他们喜欢Turtle的功能,但后来很快就转向了F#,它与VB.Net或C#相比,具有一流的功能支持和更少的礼仪。必须解释public static void Main到7yo之前,他们可以打印“Hello World”对我来说不是一个有吸引力的选择。

作为一个实验,我还创建了另一个SmallBasic compiler实现,您可能会感兴趣,因为它包括对function arguments,tuples and pattern matching的支持。

0

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