一 个 for 做了一件事情,虽然我们的菱形复杂得多,但我们认真在纸上划划分析一
下,就不难发现规律:从第一行到第 5 行,星号得数目一直在增加,而到了第 6 行 却
开始减少。而且星号和两边的空格减少都是有规律可循的。再分析一下,我们要打印
每 行星号前面的空格不难,打印后面的空格却麻烦,但我们可以通过打印前面的空格
和控 制好星号的数目来完成菱形的打印(忽略每行星号后的空格),眉头一皱,计上
心来 :) 完成这个任务分两步:一是打印前 5 行,用两个 for 来控制星号和空格;二是
打印后 4 行, 同样是用两个 for 来控制星号和空格。一共是 6 个 for ! 进一步缕清思
路,在前 5 行, i from 1 to 5( 用来控制行 ), j from 4 to 0 (用来控制 空格,因为要先
打印空格), k from 1 to 9 (用来控制星号,变化规律是从 1 到 9);再来写后面的 4
行: m from 1 to 4,n from 1 to 4,o from 7 to 1 。再求精:前 5 行,分 析变化规律:
i j k
1 4 1
2 3 3
3 2 5
4 1 7
5 0 9
我们要找,当 i=1 时, j=4 ,k=1...... 再用数学的方法思考:使当 i 等于 1 的时候 j 等于
4, i 等于 2 的时候 j 等于 3......i 等于 5 的时候, j 等于 0。比如我们可以用
2n+2=4(n=1), 下个呢?因为我们要找递归关系(所以习惯用 n )2n+2-
3=3(n=2),2n+2-6=2(n=3),2n+2-9=1 (n=4),2n+2-12=0(n=5) 满足了 i 和 j 的关系!
再发现: (2n+2) 后的每个数都是有规律的! 0 , 3, 6,9,12!都是 3 的倍数!我们终
于找到了递归关系: (2n+2)-3(n-1) ,n 属于 [1, 5] ,化简得 5-n。以此类推,完成了所
有的递归关系!你疑惑地问,我不用 2n+2 找递归 关系,用 n+3 找,或者用 3n+1 ,
或用 4n,你可以试试,结果都是一样地,那用哪个最方便?当然是 (n+3)-2(n-1) n 属
于 [1 ,5] ,记住咱们地推论了!费那么大工夫,终于完成 了如下的源程序:
main()
{