在截止日期的午夜之前,将您的工作作为单个纯文本文件提交,其中包含定义所有必要功能的SCHEME代码。
LISP编程
(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
答案 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等,但大多数问题都可以通过显式递归来表达。