这个号码'是什么?功能呢?

时间:2014-11-10 13:03:02

标签: c function output

我在考试中遇到了这个问题 - http://ideone.com/uMausI

代码是 -

#include <stdio.h>

int number(int n)
{

    if(n == 1)
    return n;
    int half = n/2;
    int k = 2*number(n/2) + half*half;
    return (n%2)?(k+n):k;

}

int main(void) {
    printf("%d",number(11));
    return 0;
}

我知道要解决这些类型的问题,应该了解FUNCTION实际上在做什么。它可以为您节省大量时间,因为您不必为每种情况运行(这可能需要相当长的时间)。我改为运行案例并找到了结果。那么,我想知道这个'数字'函数实际上做了什么?如果它做了一些有意义的事情,比如计算方形或类似的东西。我无法找到它的通用答案。

2 个答案:

答案 0 :(得分:5)

这是一个递归函数,用于计算n个自然数之和,其中'n'是递归函数的输入。

如果您尝试过一些样本输入,您可以轻松推断出它。以下是一些样本: -

输入输出

2 3

5 15

7 28

10 55

计算n个自然数之和的数学公式为: -

( n * ( n + 1 ) ) / 2

解释(感谢molbdnilo): -

假设您想要将数字从1加到100。

Compute (1 + 100) + (2 + 99) + (3 + 98) + ... + (98 + 3) + (99 + 2) + (100 + 1) = 
           101 + 101 + ... + 101 = 100 * 101 = 10100. 

由于每个数字在求和中出现两次,所以你要找的总和是

10100/2 = 5050;

总和是

n*(n+1)/2.

(如果您为偶数'n'计算2*sum(n/2),您会注意到它是(nn + 2n)/4,而sum(n)(2*nn + 2*n)/4)。 添加n * n / 4到2 * sum(n / 2),得到sum(n))。

在回应评论时编辑: -

@halkujabra molbdnilo给出了很好的解释。

@Jonathan: - 没有整数包括数字行上的整个数字范围(没有小数部分的数字)

... -100, -50 , 0 , 50 ,100...

整数是非负整数,即

0, 50, 100

自然数: - 整数 - 0,即

1, 50, 100

答案 1 :(得分:2)

正在使用此分解进行计算:

picture of triangles

显然,第n个三角形数字是2*number(n/2) + (n/2)*(n/2),加上在奇数情况下添加的最后一条线(即如果+n,则紫色线为n % 1。< / p>