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

发布于 2022-09-06 21:51:38 字数 37 浏览 22 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

匿名。 2022-09-13 21:51:38

答案楼上其实都有了,然而题目要求递归,
递归吧,我的理解呢,就是尽量避免什么转化过程,尽量少动脑吧?
我就主要说说解这种题的思路吧。
递归的思路就是分阶段求解,然后定终点。
核心就是找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; // 递归关系
}

类似的就同理可得咯

压抑⊿情绪 2022-09-13 21:51:38

定义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;
}
不即不离 2022-09-13 21:51:38
var a = 1;
for (var i = 2; i < n; i++) {
    a = a + i
}
var sum = 2*a + n;
console.log(sum)
も星光 2022-09-13 21:51:38

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
雨夜星沙 2022-09-13 21:51:38

不用数学的思想 单纯用递归的思想
比如传入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
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文