gpt4 book ai didi

c++ - 跟踪在 C++ 中调用递归函数的次数

转载 作者:可可西里 更新时间:2023-11-01 18:16:10 26 4
gpt4 key购买 nike

我正在尝试编写一个程序,该程序具有一个函数,其参数是一个字符串 vector 。我想对该函数使用递归,但每次调用该函数时,我都想更改参数,例如

fun(stringArray[i]) 

其中 i 是函数被调用的次数。

所以更简单的方法如下。但是我需要跟踪 fun 函数执行了多少次。

void fun(){
cout<<hi;
if(x!=10)
fun()
}

int main(){

fun();
}

在这个例子中,假设我只想打印 10 次,所以想要一个递增的变量,当达到 10 时,它停止。所以一般来说,我能做些什么来跟踪它?我尝试使用全局变量,但它们似乎不适用于函数。有什么建议吗?

最佳答案

我看到这里很乱,所以我决定把东西清理干净。

解决方案 0:静态变量

考虑提出的代码并稍作修改

#include<iostream>
using namespace std;

void fun()
{
static int count=1;
count++;
cout << "fun() is called " << count << " times" << endl;
if(count<=10)
{
fun();
}
}

int main()
{
cout << "first call" << endl;
fun();
cout << "second call" << endl;
fun();
cout << "third call" << endl;
fun();
}

导致此输出:

first call
fun() is called 2 times
fun() is called 3 times
fun() is called 4 times
fun() is called 5 times
fun() is called 6 times
fun() is called 7 times
fun() is called 8 times
fun() is called 9 times
fun() is called 10 times
fun() is called 11 times
second call
fun() is called 12 times
third call
fun() is called 13 times

如您所见,使用静态变量可能会导致一些意外行为。

这是一个一次性功能,将来会让您很头疼。此外,静态变量的使用导致代码不可读,容易出错

只是不要这样做!

方案一:按值传递变量

考虑这段代码:

#include <iostream>
using namespace std;

void fun(int i){
cout<<i<<endl;
if(i!=3) {
i++;
fun(i);
fun(i);
}
}

int main(){
fun(0);
}

这是输出:

0
1
2
3
3
2
3
3
1
2
3
3
2
3
3

如你所见,输出不是函数被调用的次数

解决方案 2:通过引用传递变量

#include <iostream>
using namespace std;

void fun(int& x){
if(x>=10)
return;
++x;
cout << x << endl;
fun(x);
}

void funEntry(){
int x = 0;
cout << "Entry point" << endl;
fun(x);
}

int main(){
funEntry();
funEntry();
}

将打印

Entry point
1
2
3
4
5
6
7
8
9
10

这种方法也适用于像这样的一些更奇特的递归模式

#include <iostream>
using namespace std;

void fun(int i, int& x){
if(i>=4)
return;
++x;
cout << i << " " << x << endl;
fun(i+1,x);
fun(i+2,x);
}

void funEntry(){
int x = 0;
cout << "Entry point" << endl;
fun(0,x);
}

int main(){
funEntry();
funEntry();
}

输出:

Entry point
0 1
1 2
2 3
3 4
3 5
2 6
3 7
Entry point
0 1
1 2
2 3
3 4
3 5
2 6
3 7

关于c++ - 跟踪在 C++ 中调用递归函数的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16705934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com