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

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

 #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);
}

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

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

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;
}

}

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

递归算法要注意的有两点:
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

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