练习:用递归、循环和数学公式计算1到100的和

1.递归算1到100的和

比如本题,计算1到100的和,

可以分割成

  • 第一步:计算1 + 2
  • 第二步:计算(1 + 2)+ 3
  • 第三步:计算(1 + 2 + 3)+ 4
  • ....
  • 最后一步:计算(... + 99)+ 100

也可以分割成

  • 第一步:计算100 + 99
  • 第二步:计算(100 + 99)+98
  • 第三步:计算(100 + 99 + 98)+ 97
  • ...
  • 最后一步:计算(... + 2)+ 1

每一步实际上都是“前一步的结果 + 当前数字”,算法是两个参数相加,

随着"当前数字"越来越大(从1加到100)或越来越少(从100加到1),分割的问题规模逐步缩小,最终达到终止条件(如:只剩1个数相加时)。这就构成了递归。

递归的基本要素

1.递归条件(递归调用)

  问题被分解,函数调用自身去处理更小的问题

2.终止条件(基线条件/边界条件)

  当问题足够简单时,不再递归,而是直接给出结果,防止无限循环。

以本题为例,从1加到100,终止条件:当前数等于100;递归条件:当前数少于100。

void Main()
{
    Sum(1, 100).Dump();    
}

private int Sum(int start, int end)
{
    if(start == end)//终止条件
        return end;
    else
        return start + Sum(start + 1, end);//递归条件
}
//以 Sum(1, 3) 为例:
//Sum(1, 3) 
//→ 1 + Sum(2, 3) 
//→ 1 + (2 + Sum(3, 3)) 
//→ 1 + (2 + 3) 
//→ 6
//Sum(1, 100) 的实际计算
//Sum(1, 100)
//→ 1 + Sum(2, 100)
//→ 1 + (2 + Sum(3, 100))
//→ ...
//→ 1 + 2 + 3 + ... + 100
//→ 5050

从100加到1,终止条件:当前数等于1;递归条件:当前数大于1;

void Main()
{
    Sum(1, 100).Dump();    
}

private int Sum(int start, int end)
{
    if(end == start)//终止条件
        return start;
    else
        return end + Sum(start, end - 1);//递归条件
        
}
//Sum(1, 100)
//→ 100 + Sum(1, 99)
//→ 100 + 99 + Sum(1, 98)
//→...
//→100 + 99 + ... + Sum(1, 1)

2.循环实现1加到100

int sum = 0;
for (int i = 0; i <= 100; i++)
{
    sum += i;
}
sum.Dump();
===========================================
int sum1 = 0;
int i1 = 1;
while(i1 <= 100)
{
    sum1 += i1;    
    i1++;
}
sum1.Dump();

3.数学公式实现1加到100

void Main()
{
    Sum(100).Dump();
}

private int Sum(int n)
{
    return (1 + n) * n / 2;
}

 

posted @ 2025-08-03 22:38  没有伞的孩子_97  阅读(60)  评论(0)    收藏  举报