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

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

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

有时候,我们需要不使用循环和递归,实现某些功能。这个问题可以使用C++的一些高级技术来解决。下面介绍两种方法来打印1到100,没有循环和递归。

方法一:使用函数指针和递归

我们可以使用函数指针和递归来解决这个问题。具体实现方法如下:

#include <iostream>

void printNumber(int num, void (*func)(int)) {
    if(num > 0) {
        printNumber(num-1, func);
        func(num);
    }
}

void print(int num) {
    std::cout << num << " ";
}

int main() {
    void (*func)(int);
    func = &print;
    printNumber(100, func);
    return 0;
}
代码解释

首先定义了一个函数指针func和一个printNumber函数,printNumber函数接受两个参数numfunc,其中num表示需要打印的数字,func表示需要执行的函数。在printNumber函数中,我们使用递归来打印1到100,并调用func函数来实现打印。

最后,我们在main函数中将指向print函数的函数指针传递给printNumber函数,并将num参数设置为100,从而打印出1到100。

方法二:使用静态局部变量和递归

我们也可以使用静态局部变量和递归来解决这个问题。具体实现方法如下:

#include <iostream>

void print(int num) {
    std::cout << num << " ";
    static int i = num+1;
    if(i <= 100) {
        print(i);
    }
}

int main() {
    print(1);
    return 0;
}
代码解释

print函数中,我们使用递归打印数字,并使用静态局部变量i来记录当前数字。当i小于等于100时,递归调用print函数继续打印。使用静态局部变量可以保证i不会在函数调用之间被重新初始化,从而实现递增的效果。

最后,在main函数中调用print函数,传递1作为参数,从而开始打印1到100。

总结

以上两种方法都使用了递归来解决问题,但是使用的技巧是不同的。这两种方法可能不够直观,但是它们可以提高我们的思维能力,让我们更好地理解函数指针和静态局部变量的用法。