【问题标题】:Recursion using only global variables仅使用全局变量的递归
【发布时间】:2014-06-17 06:25:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: recursion global-variables smallbasic


    【解决方案1】:

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

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

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

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

    作为一个实验,我还创建了一个替代的SmallBasic compiler 实现,您可能会觉得它很有趣,因为它包括对function argumentstuples and pattern matching 的支持。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-03-08
        • 1970-01-01
        • 2016-11-04
        • 2021-04-09
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 2021-07-12
        • 1970-01-01
        相关资源
        最近更新 更多