1 引言
Pascal之父尼古拉斯·沃斯因提出著名公式“算法+数据结构=程序”而荣获1984年计算机领域的最高奖项-图灵奖。通过这个公式,可以发现算法对于程序设计的重要性。然而算法思想的学习异常抽象,往往理解了算法的思想但却难以应用其解决实际问题。
循环结构是程序设计三大结构的重点和难点,几乎所有的算法的设计都使用了循环结构。为什么循环结构应用如此广泛,没有循环结构会给程序设计带来哪些问题,如何利用循环结构求解1到100求和问题,本系列文章将带领读者一起探索循环的秘密。
2 问题描述
1到100求和问题几乎是所有编程语言初学者都会接触到的一个问题,其定义如下,编程实现:
1 + 2 + ··· + 100 = ?
限制条件:仅依赖变量定义和加法运算符两个知识点。
3 算法描述
程序设计初学者在学习完变量的定义之后,紧接着学习了加减乘除等运算符。仅有这些知识是否可以求解1到100求和问题?
1到100求和问题定义的是1到100共一百个整数的求和,其问题规模n=100,如何缩小问题规模,简化问题求解。如果将问题规模n缩小到两个整数的求和,即1+2=?
定义两个变量a1和a2,再利用加法运算符即可求解。伪码如下:
a1 = 1
a2 = 2
sum = a1+a2
既然学会了两个整数的求和,采取相似思路,可以将问题规模进一步扩大到100个整数。
定义a1, a2, ..., a100共100个变量保存1到100这100个,然后直接相加。
a1 = 1
a2 = 2
···
a100 = 100
sum = a1 + a2 + ··· +a100
(上面两处省略号并非程序语言关键词,而是由于空间有限故省略)
至此,仅依赖变量定义和加法运算符两个知识点就可以完成1到100求和问题的求解。
4 结语
本文介绍了程序设计初学者在仅仅学习变量定义和加法运算符两个知识点后如何求解1到100求和问题,通过缩小问题规模采用以此类推的方式进行求解。当问题规模缩小后,就可以快速完成求解。
如何缩小问题规模?1到100求和问题的问题规模非常易于发现,问题规模缩小后,无论是1到2求和还是1到100求和本质上是一样的。但是有些问题的问题规模却不好定义。后续文章将针对该问题进行深入的探讨。
另外虽然本文算法完成了对1到100求和问题的求解,但是存在哪些问题呢?欢迎下方留言讨论。社会的进步就在于不断的发现问题,不断的解决问题,如此循环往复。