te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>math - Find the sum of consecutive whole numbers wo using loop in JavaScript - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

math - Find the sum of consecutive whole numbers wo using loop in JavaScript - Stack Overflow

programmeradmin4浏览0评论

I'm looking for a method to do calculations like:

function sumIntegerUpTo(number) {
  return 1+2+3+...+number;
}

If you pass number as 5 function should return the sum of 1+2+3+4+5. I'm wondering if it's possible to do without loops.

I'm looking for a method to do calculations like:

function sumIntegerUpTo(number) {
  return 1+2+3+...+number;
}

If you pass number as 5 function should return the sum of 1+2+3+4+5. I'm wondering if it's possible to do without loops.

Share Improve this question asked May 16, 2010 at 8:28 Z. ZlatevZ. Zlatev 4,8201 gold badge34 silver badges38 bronze badges 3
  • en.wikipedia/wiki/… It's the fourth one. – Matti Virkkunen Commented May 16, 2010 at 8:33
  • @FK82 - Not it isn't. You need to read the question again. – Simon Knights Commented May 16, 2010 at 9:19
  • @Simon: You're right, sum not product. Thanks. :-) – FK82 Commented May 16, 2010 at 9:23
Add a ment  | 

3 Answers 3

Reset to default 8

Of course it is!

1+2+3+...+n = n * (n+1) / 2
function sumIntegerUpTo(number) {
    return (1 + number) * number / 2;
}

I can think of two easy ways for me to remember this formula:

  • Think about adding numbers from both ends of the sequence: 1 and n, 2 and n-1, 3 and n-2, etc. Each of these little sums ends up being equal to n+1. Both ends will end at the middle (average) of the sequence, so there should be n/2 of them in total. So sum = (n+1) * (n/2).

  • There are as many number before the average (which is (1+n)/2) as there are after, and adding a pair of numbers that are equidistant to this average always results in twice the average, and there are n/2 pairs, so sum = (n+1)/2 * 2 * n/2 = (n+1)/2*n.

You can fairly easily extend the above reasoning to a different starting number, giving you: sum(numbers from a to b, inclusive) = (a+b)/2*(b-a+1).

Or you can use a recursive approach - which here is redundant given there is a simple formula! But there is always something cool and magical about recursion!

function addToN(n)
{
    if(n==0) return 0;
    else return n + addToN(n-1);
}

Edited to deal with 0!

发布评论

评论列表(0)

  1. 暂无评论