写出最短的代码

写出最短的代码

背景:

今天我在学校练习系统里面遇到了一个实验题

1
2
3
4
5
6
(语言: C)第六章实验题:编写函数计算1-1/3+1/5-1/7+…的值,直至最后一项的绝对值<0.001
提示:输出结果的最后两位是97

输入:无
输出提示:"result="
输出格式:"%f"

代码实现

我非要使用递归调用,这是我第一次写的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <math.h>

float Function() {
static int count = 1, i = 1;
i = (abs(i) + 2) * pow(-1, count++);
if (fabs(1.0 / i) < 1e-3) {
return 1.0 / i;
}
else {
return 1.0 / i + Function();
}
}

int main(void) {
printf("result=%f", 1 + Function());
return 0;
}

一坨狗屎,但是我觉得写出来还是很有意思的。

这是我第二次写的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

float Function() {
static int i = 1;
float current = 1.0 / i;
i = i + 2;
if (current < 1e-3) {
return current;
}
else {
return current - Function();
}
}

int main(void) {
printf("result=%f", Function());
return 0;
}

我真他妈是个天才,省略了math.h有文件,利用递归调用的返回值构造加减交替的形式,我觉得很值得全世界的人学习

还能再短一点,这是我第三次写的代码,做了一些小改动:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

float Function(int i) {
if (1.0 / i < 1e-3) {
return 1.0 / i;
}
else {
return 1.0 / i - Function(i+2);
}
}

int main(void) {
int i = 1;
printf("result=%f", Function(i));
return 0;
}

我真牛逼。。。。过后我又在想能不能在主函数中实现功能使代码更短?

这是我第四次写代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <math.h>

int main() {
float sum = 0,current = 1;
while (current >= 1e-3) {
static int i = 1;
current=1.0/i;
i = i + 2;
sum = -sum + current;
}
printf("result=%f", fabs(sum));
return 0;
}

虽然能实现功能,但是整个代码有点离谱了,都不是人能写出来的!

比如在while循环中定义静态变量,还有最后招笑的fabs函数

我感觉有点没有意思了,于是我问了问哈基米,让他写一个最短的代码:

1
2
3
4
5
6
7
#include<stdio.h>
float f(int i) {
return 1. / i < 1e-3 ? 1. / i : 1. / i - f(i + 2);
}
int main() {
printf("result=%f", f(1));
}

仅需7行,92字符。还借鉴了我的第二个代码

你哈基米还是牛逼。

总结

我可能是发癫了,花了2个多小时解决这么简单一个问题,但是这很值得!


写出最短的代码
http://example.com/2025/12/30/写出最短的代码/
作者
王柏森
发布于
2025年12月30日
许可协议