`
hongbochen1223
  • 浏览: 43917 次
文章分类
社区版块
存档分类
最新评论

C使用递归实现前N个元素的和

 
阅读更多

递归函数,也就是不断的调用自身的函数,使用递归能够比较方便的解决一些比较难使用循环解决的问题。就在这个例子中,求一个数组a[]的前n项和,也就是求a[n-1]+a[n-2]+…+a[0],那么如果一个函数sum是用来求数组前n项和的,sum定义为sum(int a[],int n),则使用递归的方式就是
a[n-1]+sum(a,n-1)。

使用代码来表述可能更好一些:

#include <stdio.h>

int sum(int test[],int n);

/**
 * @brief main 使用递归求一个数组的前n个元素的和
 * 假设数组为a[];则求其前n的元素的和也就是求
 * a[n-1]+a[n-2]+...a[0]
 * @return
 */
int main(void)
{
    int n;
    printf("Please input the number of an array:\n");
    scanf("%d",&n);

    printf("Please enter the element of the array:\n");

    int test[n];
    int i;
    for(i = 0;i < n;i++)
        scanf("%d",&test[i]);

    int count = sum(test,n);

    printf("The sum of the array is : %d.\n",count);

    return 0;
}

/**
 * @brief sum   实现前n个元素的和
 * @param test  要求和的数组
 * @param n     所要求的前n个元素
 * @return      返回前n个元素的和
 */
int sum(int test[],int n){
    if(n <= 0)
        return 0;

    return test[n-1]+sum(test,n-1);
}

下面是我的程序的输出,这个程序比较简单。

这里写图片描述

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    C语言程序设计-编写main程序调用函数fact求解从m个元素选n个元素的组合数的个数;组合数=m!(n!.(m-n)!);

    C语言程序设计-编写main程序调用函数fact求解从m个元素选n个元素的组合数的个数;计算公式是: 组合数=m!(n!.(m-n)!);要求m不能小于n,否则应有容错处理;说明:函数fact(x)的功能是求x!;

    用递归算法编写求一个数组A中的最大元素

    用递归算法编写求一个数组A中的最大元素;/****一个递归算法,求数组A中最大的元素***/ #include int Max(int A[], int i, int j) //求顺序表A中的最大元素 ……

    递归实现汉诺塔

    1、此程序为汉诺塔程序(此代码用到递归,包括直接递归和间接递归(间接递归是用在了重复使用本程序那块)); 2、此程序的代码流程是,由main函数进入之后,先后调用的函数是由上至下定义的; 3、亲爱的朋友,请...

    生成全排列 C语言 递归的

    C语言的全排列 注意 当n&gt;10 效率会非常低

    用递归和非递归两种方式实现归并排序

    具体来说,假设待合并的两个有序数组分别为A和B,它们的长度分别为n和m,合并后的有序数组为C,那么合并的过程可以按如下步骤进行: 1. 定义三个指针i、j和k,分别指向数组A、B和C的起始位置。 2. 比较A[i]和B[j]的...

    有重复元素的排列问题

    输入格式 第1行是元素个数n,1&lt;=n。接下来的1行是待排列的n个元素,元素中间不要加空格。 输出格式 程序运行结束时,将计算输出n个元素的所有不同排列。最后1行中的数是排列总数。 输入样例 4 aacc 输出样例...

    8594 有重复元素的排列问题

    第1行是元素个数n,1&lt;=n。接下来的1行是待排列的n个元素,元素中间不要加空格。 输出格式 程序运行结束时,将计算输出n个元素的所有不同排列。最后1行中的数是排列总数。 (说明: 此题,所有计算出的排列原本是...

    用递归的方法画分形图

     分形几何是数学领域里新兴的课题,如果将图形的每个元素按某种规则进行变形,得到新的图形,以此类推,进行若干次变形后得到的图形就是分形图形。Couch曲线是最典型的分形图形:  将一条线段按照图1进行变换...

    众数问题c实现

    输入的第1 行多重集S 中元素个数n;接下来的n 行中,每行有一个自然数。 输出 程序运行结束时,将计算结果输出。 输出有2 行,第1 行给出众数,第2 行是重数。 样例输入 6 1 2 2 2 3 5 样例输出 2 3

    问题描述:求从1~n的正整数中取出k(k<=n)个不重复整数的所有组合.pdf

    分析:求解k个数的不同组合,我们可以用一维数组a[0]~a[k-1]来保存其中的一个结果,因为组合...所以a[k-1]即组合中的最后一个数,只能为k~n 令i=a[k-1] 则 i&gt;=k && i&lt;=n 完整代码请参考我的博客文章,这里只是核心部分

    数据结构实验

    三角矩阵中的重复元素c可共享一个存储空间,其余的元素正好有n×(n+1)/2个,因此,三角矩阵可压缩到向量Sa[0……n×(n+1)/2]中,其中c存放在向量的最后一个分量中。用向量Sa[0……n×(n+1)/2]压缩存储下三角矩阵,...

    C语言用分治法找数组最大和最小元素算法实现

    这是个递归过程,对于划分后的左右两部分,同样重复这个过程,直到划分区间内只剩一个元素或者两个元素,最后得出最大最小值。 解决问题的策略: .分治法:分治法(二分法)策略是一种更高效的方法,可以将问题...

    数据结构基于C语言实现的顺序表。程序

    数据结构基于C语言实现的顺序表. #include #include #define MAXSIZE 100/* 定义二叉树节点类型 */ typedef struct node { char data; struct node *lchild, *rchild; }BTNode; BTNode* CreatBitTree()/* 递归...

    一个组合数问题(递归完成)

    组合数问题,递归解决,主要和大家分享一下解决类似问题的思想。

    C语言实现的快速排序算法.pdf

    `partition`函数用于将数组划分为较小元素和较大元素两个部分,并确定基准元素的正确位置。`quickSort`函数则是使用递归的方式对划分后的数组进行快速排序。 在`main`函数中,定义了一个测试数组`arr`,并计算数组...

    计算机科学与技术相关算法实验报告

    2、设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。 3、Hanoi塔问题 设a,b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到 小地叠在一起。各圆盘从小到大编号为1,2,…,n,现要求将...

    Strassen矩阵连乘问题,Java实现

    (2)考虑n不是2的幂次方,n为偶数的情形,设计一个传统方法与的Strassen算法相结合的矩阵相乘算法,取n=12实现分治递归(可以有多种方案实现); 矩阵A,B元素自动生成,限定矩阵元素在0-10之间。

    算法设计与分析实验一分治与递归

    设计递归程序,将正整数n的总划分数和所有划分结果在屏幕上显示,n的值由键盘输入(范围1~10);并分析算法的时间复杂度。 题目二:二分搜索 一、实验目的与要求 1 、熟悉二分搜索算法; 2 、初步掌握分治算法; ...

    浙江大学C语言上机练习题附答案

    20015当n为152时,分别求出n的个位数字(digit1)、十位数字(digit2)和百位数字(digit3)的值。 3 20026 输入2个整数 num1 和 num2,计算并输出它们的和、差、积、商与余数。 4 第3周(M3) 5 20031 求1+2+3+......+100...

    C语言程序设计标准教程

    在主函数中输入n值,并作为实参,在调用时传送给s 函数的形参量n( 注意,本例的形参变量和实参变量的标识符都为n, 但这是两个不同的量,各自的作用域不同)。 在主函数中用printf 语句输出一次n值,这个n值是实参n的...

Global site tag (gtag.js) - Google Analytics