面试题82:一句先递增打印再递减打印

来源:互联网 发布:网络信息安全办公室 编辑:程序博客网 时间:2024/05/29 11:01

题目:

函数int func(int i,int N);

其中i<=N,功能输出i递增到N再递减到i的整数,每行输出一个数。

要求:
1、只能有一个语句,即一个分号。

2、不能使用do while until goto for if 关键字,不能使用?:和逗号运算符。

3、唯一能使用的库函数为printf。

#include <iostream>#include <algorithm>using namespace std;int func(int i, int n){return (i == n && printf("%d\n", i)) || (printf("%d\n", i) && func(i + 1, n) && printf("%d\n", i));}int main(){func(1, 5);return 0;}

这个代码处理的非常巧妙,退出递归的情况竟然是短路原理。

printf返回的是打印的个数。

0 0