scratch数字之谜——1+2+3+4+......+100=?

递归与循环

在Scratch中,我们在使用递归方法时都会使用到循环语句,将复杂情况逐步转化成简单情况。我们可以这样理解递归思想,递归就是包子馅包子,它的极限就是馒头,也就是包子里面还有个包子、里面的包子里还有个包子….. 最后的最小的包子里实在放不下东西了,最后的包子就变成了“馒头”(没馅了)。

我们想到了什么?对!我们想到了一种玩具:“套娃”,“套娃”是一种木质玩具,有多个一样图案的的空心木娃娃一个套一个组成,最多可以达10多个,套娃最早出现在俄罗斯,现在收到全球各国小朋友和大朋友的喜爱。

这是不是很像我们上节课学习的猴子吃桃?最后只剩下了1个桃子。

file

在未来的编程学习中,递归思想是一种非常重要的方法,也是重要的解决问题的方法,我们一定要掌握它。

今天我们来认识和递归很相似的另外一种方法:“递推”。

递归思想与递推思想

“啊,怎么越来越复杂了?递归我还没弄明白,又来个递推!”

不要急,我们慢慢来理解,在后面的练习中,我们一定会非常清晰地理解这些概念并灵活运用它们。

首先我们先看一下递归思想和递推思想的不同点:

  • 递归是从问题的最终目标出发,逐渐将复杂问题化为简单问题,最终求得问题是逆向的。比如我们学习的猴子吃桃、李白沽酒,都是从最后结果向前去推,最终回到(回归)到起始地方求解。
  • 递推是从简单问题出发,一步步的向前发展,最终求得问题。是正向的。(现在不理解不要急,我们今天会用小案例来理解递推思想)
  • 递归中,问题中的n次数要求是计算之前就知道的。(比如李白沽酒中的4次,猴子吃桃中的10天)
  • 递推可以在计算中确定,不要求计算前就知道n。(也就是我们可以随时去改变n的次数)

那么我们就来通过题目来理解一下递推思想吧!

题目很简单:从1开始1+2+3…..+100,求1加到100的整数和,相信很多小朋友都可以算出来,自己先用自己的方法算一下吧;

file

我们找到这些数字中的规律,首尾相加和是一样的(101),1加到100中一共有50个101,所以最终的结果是:50*101=5050。

“这么简单的问题,我可以解决,不需要学习递推了!”

但是在很多计算问题中,要很快求出结果是比较困难的,这时我们就需要先从简单情况入手,然后从某一种特殊情况逐渐推出与以后比较复杂情况之间的关系,找出规律逐步解决问题。

使用递推思想来解决这个问题

在计算这个问题的过程中,我们先从最简单的运算入手:

1+2=3

1+2+3=6

1+2+3+4=10

1+2+3+4+5=15

1+2+3+4+5+6=21

… …

1+2+3+4…….+100=(1到99的和)+100

我们发现了什么规律呢?

对,如果我们一直向后计算下去,最终我们要计算的结果等于最后的那个数字加上它前面的数字的总和,对么?

那么在我们一步一步向后计算的过程中就存在两个变化的值,也就是最后那个数字在变化(从2变到3,变到4… 变到100),同时它前面的数字的总和也在变化(3变到6,变到10,变到15….),所以我们就设置两个变量x和n,其中x就代表那个不断变化的和,n就代表那个不断变化的最后数字。我们开始写程序:

file

我们也可以这样写:

file

执行程序后,我们得到最后的答案是5050,和我们自己算出来的结果完全一样,当我们计算出1-100的总和的时候,n的值是多少呢?

黔西南 触摸未来
我们正身处一个只要愿意思考,就能改变世界的时代