📅  最后修改于: 2023-12-03 15:37:34.920000             🧑  作者: Mango
在C++中,我们通常使用循环来实现一定次数的重复操作,使用递归来实现无限次数的重复操作。但是题目要求不使用这两种方法,怎么实现呢?
我们可以使用函数指针数组和递归函数来实现。具体实现流程如下:
首先我们定义一个函数指针数组,用来存储需要依次执行的函数。
typedef void (*Fun)();
Fun funs[100];
然后我们定义一个执行函数,用来依次执行上面定义的函数指针数组中的函数。并传入一个计数器,用来记录已经执行的函数数量,当计数器为100时停止执行。
void run(Fun* f, int count)
{
if(count >= 100)
return;
f[count]();
run(f, count+1);
}
接下来我们定义一个递归函数,用来递归调用run函数和给函数指针数组赋值。实现方式如下:
void PrintNum()
{
static int num = 1;
cout << num++ << endl;
funs[num-2] = &PrintNum;
run(funs, 0);
}
在这个函数中,我们先定义一个静态变量num,用来记录当前需要输出的数字。然后输出num,并将其加1,接着将PrintNum函数的函数指针赋值给函数指针数组中的当前位置,然后递归调用run函数执行函数指针数组中的函数。
最后,我们在main函数中调用PrintNum函数即可。
int main()
{
PrintNum();
return 0;
}
下面是完整的代码:
#include<iostream>
using namespace std;
typedef void (*Fun)();
Fun funs[100];
void run(Fun* f, int count)
{
if(count >= 100)
return;
f[count]();
run(f, count+1);
}
void PrintNum()
{
static int num = 1;
cout << num++ << endl;
funs[num-2] = &PrintNum;
run(funs, 0);
}
int main()
{
PrintNum();
return 0;
}
以上就是在C++中打印1到100,没有循环和递归的实现方法。