📌  相关文章
📜  在C++中打印1到100,没有循环和递归(1)

📅  最后修改于: 2023-12-03 15:37:34.920000             🧑  作者: Mango

在C++中打印1到100,没有循环和递归

在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,没有循环和递归的实现方法。