递归重新启动循环(C+;+;) 我有一个关于C++的问题。所以我制作了这个程序,它计算所有可能的组合,用递归(而不是9个循环)来解决一个问题。这是代码的一部分: int used[9]; nMin=1000; void Combinations(int index) { if(index>8) { return; } for(int i=k;i<4;i++) { used[index]=i; if (sum<nMin && Check())//Checks the solution { nMin = sum; used[i]=0; return; } else { Combinations(index+1); } } } int使用[9]; nMin=1000; 无效组合(整数索引) { 如果(索引>8) { 返回; } 对于(int i=k;i
递归重新启动循环(C+;+;) 我有一个关于C++的问题。所以我制作了这个程序,它计算所有可能的组合,用递归(而不是9个循环)来解决一个问题。这是代码的一部分: int used[9]; nMin=1000; void Combinations(int index) { if(index>8) { return; } for(int i=k;i<4;i++) { used[index]=i; if (sum<nMin && Check())//Checks the solution { nMin = sum; used[i]=0; return; } else { Combinations(index+1); } } } int使用[9]; nMin=1000; 无效组合(整数索引) { 如果(索引>8) { 返回; } 对于(int i=k;i,c++,recursion,for-loop,C++,Recursion,For Loop,int i是一个局部变量,存在于该函数调用实例的for循环上下文中。当您对同一函数进行递归调用时,您正在堆栈上推送该函数调用的一个全新实例,它有自己的for循环和自己的int i变量。它们没有相互连接的方式 如果希望对函数的所有递归调用共享一个计数器,则需要将其定义为一个静态变量,并在for循环的范围之外进行定义,如下所示: void Combinations(int index) { static int persistentCounter; 这将在递归调用中保持其值。int i是
int i
是一个局部变量,存在于该函数调用实例的for循环上下文中。当您对同一函数进行递归调用时,您正在堆栈上推送该函数调用的一个全新实例,它有自己的for循环和自己的int i
变量。它们没有相互连接的方式
如果希望对函数的所有递归调用共享一个计数器,则需要将其定义为一个静态变量,并在for循环的范围之外进行定义,如下所示:
void Combinations(int index)
{
static int persistentCounter;
这将在递归调用中保持其值。
int i
是一个局部变量,存在于该函数调用实例的for循环上下文中。当您对同一函数进行递归调用时,您正在堆栈上推送该函数调用的全新实例,它有自己的for循环及其ownint i
变量。它们之间没有任何连接
如果希望对函数的所有递归调用共享一个计数器,则需要将其定义为一个静态变量,并在for循环的范围之外进行定义,如下所示:
void Combinations(int index)
{
static int persistentCounter;
这将在递归调用中保持它的值。如果我读对了,您的问题是循环变量
I
是否会被对组合的递归调用保护/保留
答案是是,循环计数器的值将被保留。原因是。每次调用函数时,堆栈都会为新变量i
创建空间,该变量的作用域为当前调用。这意味着在函数调用期间与i
的所有交互都是针对该特定调用创建的i
打电话
注意:C/C++语言标准没有明确的堆栈概念。这实际上是实现自动存储的一个实现细节。如果我读得正确,您的问题是循环变量I
是否会通过对组合的递归调用来保护/保留
答案是是,循环计数器的值将被保留。原因是。每次调用函数时,堆栈都会为新变量i
创建空间,该变量的作用域为当前调用。这意味着在函数调用期间与i
的所有交互都是针对该特定调用创建的i
打电话
注意:C/C++语言标准没有明确的堆栈概念。这实际上是实现自动存储的一个实现细节。这是一个问题还是一个陈述?您是否抱怨在调用组合(索引+1)后,I
被设置为0
?如果是,您如何测试这一点?您确定您没有看到另一个i
的化身吗?“i这就是它的工作原理”是一个问题还是一个陈述?您是否抱怨i
在调用组合(索引+1)后被设置为0
?如果是,您是如何测试这一点的?您确定您没有看到另一个i
的化身吗?