c++ - 使用静态变量的递归函数
问题描述
所以这个函数似乎需要使用静态函数,我意识到的问题是在递归函数结束之前没有办法重置静态var。有没有一种我没有看到的方法,或者有没有不使用静态变量的好方法。
这个函数的目标是首先用奇数 var 填充一个数组,所以假设你称之为 fillAryOddFirst(ary, 13) 那么数组将按以下顺序填充 [13, 11, 9, 7, 5, 3, 1、2、4、6、8、12]
void fillAryOddFirst(int ary[], int size) {
static int pos;
if (size <= 0) {
return;
}
if(size % 2 != 0){
ary[pos] = size;
pos++;
}
fillAryOddFirst(ary, size-1);
if(size % 2 == 0 ){
ary[pos] = size;
pos++;
}
return;
}
解决方案
不,没有办法重置局部static
变量。
如果您希望能够重置它,您唯一的选择是将其设为全局变量,即将其声明移到函数之外。
另一种可能性是使其成为您通过引用传递的参数:
void fillAryOddFirst(int ary[], int size, int &pos)
{
if (size <= 0)
{
return;
}
if (size % 2 != 0)
{
ary[pos] = size;
pos++;
}
fillAryOddFirst(ary, size - 1, pos);
if(size % 2 == 0 )
{
ary[pos] = size;
pos++;
}
}
void fillAryOddFirst(int ary[], int size)
{
int pos = 0;
fillAryOddFirst(ary, size, pos);
}
推荐阅读
- c++ - 为什么“在一个库中分配而在另一个库中释放”是错误的
- pipeline - Monogame 管道文件太大
- php - 一个正常工作的 upwork-api 财务报告调用现在返回 invalid_query
- java - 离开活动后在文本视图中保存文本
- networking - 通过 struct rt 检索邻居条目
- php - webprofiler 无法处理干净的 symfony4 项目
- python - Mongo 游标的未评估状态是什么?
- android - com.google.android.gms.common.api.ApiException:10
- java - 如何将 Midi 消息发送到特定的 Midi 端口
- objective-c - Objective C 类型化类指针