hutods 2015-12-12 06:42 采纳率: 100%
浏览 6917
已采纳

计算1+2+3+...+100,使用递归算法实现。

计算1+2+3+...+100,使用递归算法实现。不能使用循环语句?请问这个题目的思路是什么

  • 写回答

6条回答 默认 最新

  • threenewbee 2015-12-12 06:56
    关注
     #include <stdio.h>
    int foo(int acc, int n)
    {
        if (n > 100) return acc;
        return foo(acc + n, n + 1);
    }
    int main()
    {
        int i = foo(0, 1);
        printf("%d", i);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • jcz1226 2015-12-12 06:53
    关注

    int F(x){
    if(x==1) return 1;
    else
    return x+F(x-1);
    }
    F(100)就是答案了。

    评论
  • 青山师 博客专家认证 2015-12-12 07:04
    关注

    以下是笔者的一个思路,仅供参考:

    package org.byron4j;

    public class Recursion4Add {
    public static void main(String[] args) {
    System.out.println(recursion(100, 1));;
    }

    /**
     * f(1)=1
     * f(n)=f(n-1)+n
     * 实现思路:不允许循环,则借助index作为计数器,通过index步增来控制累加运算
     * @param startNum
     * @param index
     * @return
     */
    private static int recursion(int startNum, int index){
    
        if( 100 != index )  
            startNum = recursion(startNum + index,++index);
        return startNum;
    }
    

    }

    评论
  • jinxiuwei 2015-12-12 07:25
    关注

    int F(x){
    if(x==1) return 1;
    else
    return x+F(x-1);
    }

    评论
  • 思航 2015-12-12 07:44
    关注

    递归算法要注意的有两点:
    1) f(n) 和 f(n -1)之间的关系
    2) 递归结束条件

    以 1+2+3+...+100 为例:
    我们要实现一个方法 f(n)来求 1+2+3+...+n,即f(100)就可以得到 1+2+3+...+100

    现在,我们分析一下 f(n) 和f(n-1)的关系:
    f(n) = 1+2+3+...+n
    f(n - 1) = 1+2+3+...+n -1
    可知 :
    f(n) = f( n-1 ) + n

    然后再确定一下递归结束条件,这里是 n == 0 时结束,所以这个方法可以这样实现(这里我使用lua实现,其实知道原理,用什么语言都一样)
    function f( n )
    -- 判断输入参数的类型(这里只是提醒对函数入口作校验,根据需求,添加验证,以增加程序的健壮性)
    if type(n) ~= number then
    print("输入的参数类型有错误")
    return 0
    end

    if n == 0 then
        return 0
    end
    return n + f(n-1)
    

    end

    评论
  • sinat_33342752 2015-12-15 11:03
    关注

    int F(x){
    if(x==1) return 1;
    else
    return x+F(x-1);
    }

    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 利用加权最小二乘法求亚马逊各类商品的价格指标?怎么求?
  • ¥15 c++ word自动化,为什么可用接口是空的?
  • ¥15 Matlab计算100000*100000的矩阵运算问题:
  • ¥50 VB6.0如何识别粘连的不规则的数字图片验证码
  • ¥16 需要完整的这份订单所有的代码,可以加钱
  • ¥30 写一个带界面控制的机房电脑一键开机关机并且实时监控的软件
  • ¥15 Stata数据分析请教
  • ¥15 请教如何为VS2022搭建 Debug|win32的openCV环境?
  • ¥15 关于#c++#的问题:c++如何使用websocketpp实现websocket接口调用,求示例代码和相关资料
  • ¥15 51单片机的外部中断,按下按键后不能切换到另一个模式