UVa 11384 Help is needed for Dexter

  将[1, n]从中间分成[1, n/2] 和[n/2+1, n]两个部分,分别包含n/2和(n+1)/2个数,将第二部分的数分别减去n/2+1, 第二部分变为[0, (n-1)/2], 第一部分包括第二部分,可得递推公式为:f(n) = f(n/2) + 1; 代码如下:  

  

View Code
 1 #include <cstdio>
 2 
 3 int f(int n)
 4 {
 5     return n == 1 ? 1 : f(n/2)+1;
 6 }
 7 
 8 int main()
 9 {
10     int n;
11     while(scanf("%d", &n) != EOF)
12         printf("%d\n", f(n));
13     return 0;
14 }
原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3010696.html