为了账号安全,请及时绑定邮箱和手机立即绑定

js递归求和1,2,3,..., n,..., 3,2,1?

js递归求和1,2,3,..., n,..., 3,2,1?

海绵宝宝撒 2019-03-19 17:18:12
js递归求和1,2,3,..., n,..., 3,2,1?
查看完整描述

5 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

答案楼上其实都有了,然而题目要求递归,

递归吧,我的理解呢,就是尽量避免什么转化过程,尽量少动脑吧?

我就主要说说解这种题的思路吧。

递归的思路就是分阶段求解,然后定终点。

核心就是找fn(n)和fn(n-1)的关系,结合边界条件fn(1),写出一个如下的函数:


function fn(n) {

    // 终点

    if (...) return ...;

    // 递归

    return fn(n-1) + ...;

}

以本题来说,


fn(n) = 1 + 2 + 3 + ... + n-1 + n + n-1 + ... + 3 + 2 + 1;

fn(n-1) = 1 + 2 + 3 + ... + n-1 + ... + 3 + 2 + 1;


fn(n) = fn(n-1) + n-1 + n;

终点


fn(1) = 1;

结合便能写出


function fn(n) {

    if (n==1) return 1; // 终点

    return fn(n-1) + n-1 + n; // 递归关系

}

类似的就同理可得咯


查看完整回答
反对 回复 2019-03-25
?
慕斯709654

TA贡献1840条经验 获得超5个赞

定义f(n) = sum(1, 2, 3, ..., n, ..., 3, 2, 1)。


解法一

问题转化为f(n) = 2 * g(n) - n,其中g(n) = sum(1, 2, 3, ..., n)。不用高斯求和法强行递归的话,g(n) = g(n - 1) + n(n > 1),g(n) = 1(n = 1)。


function g(n) {

  if(n > 1) return g(n - 1) + n;

  else if(n == 1) return 1;

}


function f(n) {

  return 2 * g(n) + n;

}

解法二

显然,f(n) = f(n - 1) + n + (n - 1)(n > 1),f(n) = 1(n = 1)。


function f(n) {

  if(n > 1) return f(n - 1) + n + n - 1;

  else if(n == 1) return 1;

}


查看完整回答
反对 回复 2019-03-25
?
慕少森

TA贡献2019条经验 获得超9个赞

var a = 1;

for (var i = 2; i < n; i++) {

    a = a + i

}

var sum = 2*a + n;

console.log(sum)


查看完整回答
反对 回复 2019-03-25
?
墨色风雨

TA贡献1853条经验 获得超6个赞

将1,2,3,..., n,..., 3,2,1转化为求前n项的和与前n-1的和的和。

于是有了:

1 + 2 + 3 + 4 + ... + n + ... + 3 + 2 + 1 = n(n + 1)/2 + (n - 1)(n - 1 + 1)/2 

整理得到 n2


所以:


Math.pow(n, 2)

但是题目又要求用递归做。


const cal = (n) => {

  if(n === 1) {

    return 1;

  }

  return 2 * n + cal(n - 1) - 1;

}


console.log(cal(4)) //16


查看完整回答
反对 回复 2019-03-25
?
Qyouu

TA贡献1786条经验 获得超11个赞

不用数学的思想 单纯用递归的思想 

比如传入4

先执行先序递归 index++

先序递归做value = 1+2+3+4 

满足条件后 return;

然后执行后续递归 开始index--

后续递归做value += 3+2+1+0;

var cal = function() {


        var index=0;

        var value=0;

        return function show(n) {

                if(n < 0) return;

                value += index;

                if(index === n)return;

                index++; 

                show(n);

                index--;

                value += index;

                return value;

        }

    };

    cal()(4) // 16

    


查看完整回答
反对 回复 2019-03-25
  • 5 回答
  • 0 关注
  • 964 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信