Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 循环和迭代_Algorithm - Fatal编程技术网

Algorithm 循环和迭代

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”); }否则{ 控制

有没有一种方法可以让一个函数有两个返回选项,并且在某个迭代间隔后选择返回选项

例如: 在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”);
}否则{
控制台日志(“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,即使它不是动态的,您仍然需要给函数一些状态。它必须知道它是否第一次被执行。这是国家的要求。