《C语言入门100例》第二例 数列求和

一、概念补充

1.1递归

  • 定义

当一个函数用它自己的定义时就称为是递归的。

  • 基本准则
  1. 基准情形(base case), 递归中必须有某些基准情形,它们不用递归就能求解
  2. 不断推进,对于那些需要递归求解的情形,递归调用必须能够朝着产生基准情形的方向推进
  • 注意事项
  • C允许函数是递归的,但C提供的仅仅是遵循递归思想的一种企图
  • 不是所有的数学递归函数都能有效地由C的递归模拟来实现

二、习题求解

【例题1】求1+2+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

  1. 题目分析

由题我们可知以下的信息:

  • 1+2+..+n的等差数列的和
  • 不能使用乘除法,for、while、if、else、switch、case等关键字及条件判断语句

根据这些信息我们可以知道,只能通过简单的加减语句来实现求和。从1写到n显然是不可能的事情,那这时候我们就可以借助递归的思想来实现求和。既然要使用递归,那就要找出递归的基本情形,以及如何不断推进。

  • 基准情形:将这个式子化为最简单的形式,即n = 1,这个时候我们需要做任何操作,可以直接返回n的值。满足基准情形的原则,返回值就设定为1,。
  • 不断推进:从1到2,两者之间相差了1,推广到一般情形,当n>0时,第n个数总是和第n+1个数相差值为1。
  1. 源码实现
int sumNums(int n){
    //1.设定递归的基准情形
    if(n == 1)
    {
        return 1;
    }
    //2.返回不断推进的递归条件,直到遇到1时返回
    return  n + sumNums(n-1);
}

【例题2】计算 SUM(n) = 1 + 2 + 3 + … + n。输入将由一系列整数 n 组成,每行一个整数。对于每种情况,在一行中输出 SUM(n),后跟一个空行。 您可以假设结果将在 32 位有符号整数范围内。

  1. 题目分析

简单的求等差数列的和,我们可以使用循环体不断加1求和,注意在求解结果的后面打印一个空行。

  1. 源码实现
#include<stdio.h>

/*定义一个函数,用来求等差数列的和*/
int sumNums(int n)
{
    int sum = 0;
    
    for (int i = 1; i <= n; ++i)
    {
        sum += i;
    }

    return sum;
}

int main()
{
    int n, sum;
    //循环输入
    while(scanf("%d", &n) != EOF)
    {
        sum = sumNums(n);
        printf("%d\n", sum);
    }

    return 0;
}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值