Algorithm 循环和迭代
有没有一种方法可以让一个函数有两个返回选项,并且在某个迭代间隔后选择返回选项 例如: 在4次迭代后从“a”切换到“b”并从“b”切换到“a”的函数返回: a A. A. A. B B B B A. A. A. A. B B B B . . 编辑我这样做是为了解决这个问题:Algorithm 循环和迭代,algorithm,Algorithm,有没有一种方法可以让一个函数有两个返回选项,并且在某个迭代间隔后选择返回选项 例如: 在4次迭代后从“a”切换到“b”并从“b”切换到“a”的函数返回: a A. A. A. B B B B A. A. A. A. B B B B . . 编辑我这样做是为了解决这个问题: var计数器=0; var状态=真; var changeState=函数(){ 变量x=0 而(x!=12){ 如果(计数器==4){ 计数器=0; 状态=!状态; } 如果(州){ 控制台日志(“a”); }否则{ 控制
var计数器=0;
var状态=真;
var changeState=函数(){
变量x=0
而(x!=12){
如果(计数器==4){
计数器=0;
状态=!状态;
}
如果(州){
控制台日志(“a”);
}否则{
控制台日志(“b”)
}
计数器+=1;
x+=1
}
}
changeState();
您需要一个函数,因为它需要以某种方式记住以前对它的调用中的某些内容。这就是所谓的,也就是说函数不是
对于您给出的示例,函数需要知道(即具有状态)以前调用的数量(模8),或以前的四个返回值,或这些信息的某些组合
如何实现这样的函数取决于编程语言
在面向对象编程语言中,您将创建一个函数为方法的类,以及一个反映该状态的属性。调用该函数时,它还会更新状态。例如,在Java中:
class-MyClass{
int callCount=0;
char myFunction(){
返回“aaaabbbb”.charAt(this.callCount++%8);
}
}
您可以重复调用该函数,如下所示:
MyClass obj=newmyclass();
对于(int i=0;i<10;i++){
System.out.println(obj.myFunction());
}
在JavaScript中,您可以执行相同的操作,也可以创建:
function createFunction(){
让callCount=0;
返回函数myFunction(){
返回“aaaabbbb”[callCount++%8];
}
}
让myFunction=createFunction();
for(设i=0;i<10;i++){
log(myFunction());
}
不是一个“纯”函数,但在大多数编程语言中,您可以通过全局变量、线程静态变量、迭代器、外部数据库或作为参数传入状态,在这种状态下,您可以跟踪迭代次数。但是,您可能需要担心线程安全性-如果同时对函数进行两次调用会发生什么情况?也许我没有理解这一点。。但是纯/有状态函数与OP的请求有什么关系呢?为什么不将两条不同的逻辑路径(如果有)分支并相应地返回呢?OP提到迭代,而不是递归调用。否?@GiorgiTsiklauri,如果else条件是Ian所指的状态,那么您将根据该信息来判断是否存在。@trincot“并且在一定的迭代间隔后选择了返回选项?”-您可能是这个意思。我同意,如果某个时间间隔是动态给定的,那么它应该是一个成员国,或者也可以传递到函数中(为什么不?)。我只是基于这一点进行推理,OP没有提到间隔是否是动态的。@GiorgiTsiklauri,即使它不是动态的,您仍然需要给函数一些状态。它必须知道它是否第一次被执行。这是国家的要求。