一個比較問題

(一)一個比較問題:

一個人想每天努力多一點。

(二)對比較問題的模擬:

一個人在第一天畫一個正方形

(圖4-1

在第二天畫兩個正方形

(圖4-2

在第三天畫三個正方形

(圖4-3

。。。。。。

在第n天畫n個正方形

(圖4-4

(三)關於比較問題的模擬的疑問

那個人在第一天之後是否在原來的基礎上畫正方形,即是在看着之前畫的正方形或者函數的基礎上畫當天的正方形,還是直接畫出當天的正方形。例如:

在第四天時,那個人看着之前畫的正方形或者函數,畫出第四天的正方形

(圖4-5

(圖4-6

在第四天時,那個人直接畫出當天的正方形

(圖4-7

如果那個人在看着之前畫的正方形或者函數的基礎上畫當天的正方形,則存在比較,比如第三天的正方形與第二天的正方形進行比較,第二天的函數與第三天的正方形進行比較。

 

五、關於比較問題的深入探討

在比較問題中,如果那個人是在原來的基礎上進行操作,那麼存在對原基礎進行抽象的現象,現象產生的原因是正方形佔用大量的面積,希望通過抽象來減少面積的佔用。

對比較問題進行模擬以及分析後,不難選擇用阿拉伯數字對當天方塊進行抽象,例如:

(圖5-1

通過枚舉法,不難抽象原基礎,過程如下:

第一天有1個正方形,記為1

(圖5-2

第二天有3個正方形,變形,記為3×1

(圖5-3

第三天有6個正方形,變形,記為3×2

(圖5-4

第四天有10個正方形,變形,記為3×3+1

(圖5-5

第五天有15個正方形,變形,記為3×4+3×1

(圖5-6

第六天有21個方塊,變形,記為3×5+3×2

(圖5-7

不難發現當天的總方塊數為昨天要畫的方塊數+大前天的方塊總數。

以下用程序檢驗:

 

#include <iostream>
using namespace std;
const int num = 13;
int func(int n);
int main() {
    cout << func(num) << endl;
    cout << (num*(num+1))/2 << endl;
    return 0;
}

 

int func(int n) {
    if(n == 1) {
        return 1;
    }
    else if(n == 2) {
        return 3;
    }
    else if(n == 3) {
       return 6;
    }
    else {
        return (3*(n-1)+func(n-3));
    }
}

運行結果為:

91
91

綜上,文中的迭代式是正確的。