Lisp程序(使用Scheme 48 1.9解释器)找出系列1 ^ 3 + 2 ^ 3 + ...的总和。 + n ^ 3

时间:2016-01-24 01:45:44

标签: scheme lisp

在截止日期的午夜之前,将您的工作作为单个纯文本文件提交,其中包含定义所有必要功能的SCHEME代码。

LISP编程

  1. 写一个Lisp函数sumcubes,它取一个数字n并返回和1 * 1 * 1 + 2 * 2 * 2 + ... + n n n。例如:
  2. (sumcubes 0)

    0

    (sumcubes 4)100

    (因为13 + 23 + 33 + 43 = 1 + 8 + 27 + 64 = 100)

    我已经看过如何在C中执行此操作,而且我在LISP中将其格式化时遇到了问题。

    提前感谢您的帮助(我几乎不知道LISP,我基本上有一周的时间来学习它。)

    这是我看到的C代码中的内容(http://www.cquestions.com/2011/07/write-c-program-to-find-out-sum-of_19.html):

      

    1 ^ 2 + 2 ^ 2 +的总和.... c编程语言中的+ n ^ 2系列

    #include<stdio.h>
    
    int main(){
    
    int n,i;
    int sum=0;
    
    printf("Enter the n i.e. max values of series: ");
    scanf("%d",&n);
    
    sum = (n * (n + 1) * (2 * n + 1 )) / 6; //I believe this is the crucial line I need.
    
    printf("Sum of the series : ");
    
    for(i =1;i<=n;i++){
         if (i != n)
             printf("%d^2 + ",i);
         else
             printf("%d^2 = %d ",i,sum);
    }
    
    return 0;
    }
    
      

    示例输出:

         

    输入n,即系列的最大值:5   系列之和:1 ^ 2 + 2 ^ 2 + 3 ^ 2 + 4 ^ 2 + 5 ^ 2 = 55

         

    数学公式:

         

    系列之和12 + 22 + 32 + ... + n2 =   n(n + 1)(2n + 1)/ 6

2 个答案:

答案 0 :(得分:1)

我自己得到了这个问题的答案。

> (define (sumcubes n) (expt (/ (* (+ 1 n) n) 2) 2))
; no values returned
> (sumcubes 3)
36
> (sumcubes 4)
100

答案 1 :(得分:0)

给我们一些代码,即使它只是在C中。我在C语言中完全是新手,所以这里有一些puedo-C。翻译到计划仍然由你决定。

我假设你的想法像

sumcube{INT n} {
    INT acc = 0
    for i<n, i++ , 1 {
    acc = acc + cube(i)
    }
    return acc}

最直接的方案将非常相似。而是初始化累加器并在for循环中操作其值,您可以定义一个辅助过程(函数),它将n和某个累加器值直接作为参数。它也有助于减少1而不是向上(向基本情况工作)

sumcube{INT n}{
  return sumecubehelper(n 0)}

sumcubehelper {INT n, INT acc}{
    if i<1 
    return acc
    else sumcumbehelper(n - 1 , acc + cube(n))}
    acc = acc + cube(i)
    }
    return acc}

您还可以使用更高阶函数,如map,apply,fold等,但大多数问题都可以通过显式递归来表达。