📅  最后修改于: 2023-12-03 15:23:22.685000             🧑  作者: Mango
有时候,我们需要不使用循环和递归,实现某些功能。这个问题可以使用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
函数接受两个参数num
和func
,其中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。
以上两种方法都使用了递归来解决问题,但是使用的技巧是不同的。这两种方法可能不够直观,但是它们可以提高我们的思维能力,让我们更好地理解函数指针和静态局部变量的用法。