2.简单求和[递归法]

计算1+2+3+4+5,用递归法的两种形式,练习这题主要查看递归规律,训练递归,形成递归的【本能】。
第一种,从后往前加。

int sum(int a[],int n)
{
    return n==0?0:sum(a,n-1)+a[n-1];
}

第二种,从两边对加,例:(1+5)+(2+4)+3,这个需要判定,假如数组的个数为偶,则左边+1==右边,如果为奇数,则左边+2==右边,需要将这三个数之和返回:

int sum(int a[],int l,int r)
{
    if(l+2==r)/*中间隔一个元素*/
        return a[l]+a[l+1]+a[r];
    if(l+1==r)
        return a[l]+a[r];
    return sum(a,l+1,r-1)+a[l]+a[r];
}
/*------完整代码@映雪-------*/
#include <iostream>
using namespace std;
int sum(int a[],int L,int R)
{
    if(L+2==R)/*中间隔一个元素*/
        return a[L]+a[L+1]+a[R];
    if(L+1==R)
        return a[L]+a[R];
    return sum(a,L+1,R-1)+a[L]+a[R];
}
int main()
{
    int a[]={1,2,3,4,5};
    cout<<sum(a,0,sizeof(a)/sizeof(int)-1);
    return 0;
}
时间: 2025-02-01 04:48:45

2.简单求和[递归法]的相关文章

C语言之函数调用14—递归法打印勒让德多项式前N项

//递归法 /* ================================================================== 题目:勒让德多项式 ================================================================== */ #include <stdio.h> double p(int n,double x) { if(n==0)return 1.0; else if(n==1)return x; else

八皇后问题,递归法实现

八皇后问题,是19世纪著名的数学家高斯在1850年提出的:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列.同一斜线上,试问有多少种摆法?高斯先生给出的答案是“76”种,实际是76种吗? 八皇后问题是回溯算法的典型应用,但是本文提供递归的求法. 递归的核心思想可以总结成:把一个复杂的问题无限缩小,每个小问题的解法都是一样的,最终归结于求解每个小问题的原型.递归编程的思路可以假设所有的问题都已解决,来到结束条件,这是非常简单的,然后再调用自身求解整个问

LA3882 约瑟夫数学递归法

首先,约瑟夫环的数学优化方法为: 为了讨论方便,先把问题稍微改变一下,并不影响原意:问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数.求胜利者的编号. 我们知道第一个人(编号一定是(m-1)%n) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m%n的人开始):    k k+1 k+2 ... n-2, n-1, 0, 1, 2, ... k-2 并且从k开始报0.现在我们把他们的编号做一下转换: k --> 0 k+1 --

递归法

递归法(Recursion)是一种在函数或方法中调用自身的编程技术,在计算机方法中,使用递归技术往往使函数的定义和算法的描述简洁且易于理解.任何可以用计算机求解的问题所需要的计算时间都与其规模有关.而且规模越小,解题所需要的计算时间通常越小,从而比较容易处理. 简而言之,递归思想就是用与自身问题相似但规模较小的问题来描述自己. 例如,兔子出生两个月后就有繁殖能力,一对兔子每个月能生出一对兔子来.如果所有兔子都不死,那么一年以后可以繁殖多少对兔子? 第一个月小兔子没有繁殖能力,所有还是一对:两个月

002-算法-递归法

一.概念:(Recursion)在数学与计算机科学中,是指在函数定义中使函数自身的方法. 定义: 在数学和计算器及科学中,递归是指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其它所有情况都能被还原为其基本情况. http://zh.wikipedia.org/zh/%E9%80%92%E5%BD%92 eg:递归求n的阶乘 code: 1 /** 2 * @declare: 递归求N的阶乘<br> 3 * @author: cphmvp 4 * @version: 1.0 5 *

C语言之函数调用12—递归法求阿克曼函数

//递归法! /* =========================================== 题目:编写阿克曼函数的递归函数程序! A(m,n)= n+1                (m=0) A(m-1,1)       (m=0) A(m-1,A(m,n-1))            (m!=0,n!=0) =========================================== */ #include<stdio.h> int A(int m,int n)

【C语言】求斐波那契(Fibonacci)数列通项(递归法、非递归法)

意大利的数学家列昂那多·斐波那契在1202年研究兔子产崽问题时发现了此数列.设一对大兔子每月生一对小兔子,每对新生兔在出生一个月后又下崽,假若兔子都不死亡.   问:一对兔子,一年能繁殖成多少对兔子?题中本质上有两类兔子:一类是能生殖的兔子,简称为大兔子:新生的兔子不能生殖,简称为小兔子:小兔子一个月就长成大兔子.求的是大兔子与小兔子的总和. 月     份  ⅠⅡ  Ⅲ  Ⅳ  Ⅴ Ⅵ  Ⅶ  Ⅷ Ⅸ Ⅹ  Ⅺ  Ⅻ大兔对数 1  1   2   3   5  8  13  21 34 55 

编译原理随笔4(自下而上的语法分析-递归法)

0.基础知识 推导 自上而下的语法分析过程 预测分析程序,递归下降分析法(最左推导) 注:要求文法是LL(1)文法 规约 自下而上的语法分析过程 简单优先分析法,算符优先分析法,LR分析法 1.自下而上的语法分析方法 过程思想: 最左规约的过程 由输入串开始,朝着文法的开始符号进行规约 规约成非终结符 注:输入串是指词法分析器送过来的二元式序列 下推自动机PDA 语法分析程序执行动作 移入:读入一个单词,入栈,读头后移 规约:检查栈顶 若干个符号能否规约,若能,则以产生式左部替代该符号,同时输出

递归法的理解——以反转链表为例

2020-01-07 递归是什么: 递归,从定义上说,指的是某个函数直接或者间接调用自己时,则发生了递归. 比如说著名的斐波拉契数列的实现方法之一: 1 public static int f(int n){ 2 3 if(n == 1 || n == 2) return 1; 4 5 return f(n-1) + f(n-2); 6 7 } 在这个例子中,对于n大于2的情况,我们都直接调用f自身来递归解决了这个问题. 从底层的情况来思考,实际上计算机将相关的函数先压入stack中,然后再po