《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-6(question?)

     【例10-6】编写一个递归函数sum(int n),完成计算1+2+3+...+n。

      【分析】

       设计递归计算法是面试题中常见的一类问题。传统的计算累加求和的问题多用循环实现,但这里要使用递归方法。其实可以将题目中这个计算求和的函数sum()定义为递归函数如下:

     这是因为sum(n)表示计算1+2+3+...n的和。当n等于1时,很显然sum(n)等于1,当n大于1时,1+2+3+...+n的和等于n+(1+2+3+...+n-1)的和,而1+2+3+...+n-1的和可用sum(n-1)表示,因此构成了递归结构。

    这样就可以方便地设计出sum的递归算法。

int sum(int n)
{
    if(n==1) return 1;
    else   return n+sum(n-1);
}

   下面给出完整的测试程序,程序清单10-6

#include "stdio.h"
int sum(int n)
{
    if(n==1) return 1;
    else   return n+sum(n-1);
}

main()
{
    int n;
    printf("Please input a integer for counting 1+2+...+n\n");
    scanf("%d",&n);
    printf("The result of 1+2+...+%d is\n%d",n,sum(n));
    getche();
}

   本程序运行结果如下图所示


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值