Algorithm 如何计算Microsoft Small Basic中字符串的所有排列?

Algorithm 如何计算Microsoft Small Basic中字符串的所有排列?,algorithm,smallbasic,Algorithm,Smallbasic,如何计算Microsoft Small Basic中字符串的所有排列 所有排列的蛮力探索通常是用C语言和C++语言中的递归来完成的。但是,Microsoft Small Basic不支持函数的参数,因此不可能以相同的方式实现递归算法 也许使用堆栈在小型Basic中是可行的?准确程度如何?您不能在Smallbasic中的函数中使用参数,但由于所有变量都是全局变量,您只需在调用函数并在函数中使用它们之前设置它们即可。函数也可以调用自身。这意味着您可以使用函数(或在SB中调用的子程序)来“强制”此算法

如何计算Microsoft Small Basic中字符串的所有排列

所有排列的蛮力探索通常是用C语言和C++语言中的递归来完成的。但是,Microsoft Small Basic不支持函数的参数,因此不可能以相同的方式实现递归算法


也许使用堆栈在小型Basic中是可行的?准确程度如何?

您不能在Smallbasic中的函数中使用参数,但由于所有变量都是全局变量,您只需在调用函数并在函数中使用它们之前设置它们即可。函数也可以调用自身。这意味着您可以使用函数(或在SB中调用的子程序)来“强制”此算法

请看这里:

Sub Printx
  TextWindow.WriteLine(x)

  x = x + 1
  Printx()
EndSub

x = 1
Printx()

请注意,这种方法可能会在子程序抛出stackoverflow错误时,在大约2000次“回调”子程序后使程序崩溃。

那么,如何将此C函数转换为SmallBasic:int fib(int n){if(!n | | n==1)return n;return fib(n-1)+fib(n-2)}查看问题所在“当所有变量都是全局变量时,您不需要函数参数"? 要模拟这样一个简单的递归函数,您需要使用堆栈。我想您是对的。您应该为SB检查LitDev扩展,因为我相信它可以用它来完成。什么意思?据我所知,决定一个变量是局部变量还是全局变量是由编译器中称为解析器的部分完成的。将一个可执行文件与另一个DLL(如LitDev)链接不会影响解析器,它发生在解析完成之后。我的意思是,可以使用LitDev扩展中预先存在的函数。也许像这个?LDCall.Function(funcName,arg1)或(稍微作弊的)LDInline.IncludeCS(source,assemblies,dllName)您能给我看一些示例代码吗?比如,如何使用LDCall对象递归地实现斐波那契序列?