c - 这个 'number' 函数有什么作用?

标签 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 实际上在做什么。它为您节省了很多时间,因为您不必为每个案例都运行(这可能需要更长的时间)。相反,我运行了这个案例并找到了结果。所以,我想知道这个“数字”函数到底做了什么?如果它做了一些有意义的事情,比如计算平方或类似的事情。我找不到通用的答案。

最佳答案

这是一个递归函数,用于计算 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

关于c - 这个 'number' 函数有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26844478/

相关文章:

python - 从列表写入 CSV,write.row 似乎停在了一个奇怪的地方

c - 套接字只接受特定地址?

c - 在 C 中定义全局数组

c - BSD getmicrotime() 输出到 Excel 日期

c - 我的 c 套接字程序在成功执行命令后在命令上吐出垃圾,不知道为什么

c - C中的默认函数参数

php - 类型转换函数参数

javascript - 如何创建包含变量输入的函数的变量

mysql - 如何检测命令输出是否正在unix管道中使用

javascript - 当我在 JavaScript 中计算 1000^1000 时如何避免无穷大的结果