一、题意

递归输入天平的wl, dl, wr, dr,分别表示天平的左重量、距离和右重量、距离。
要求判断是否所有天平都力矩平衡。

二、解析

递归输入时顺便判断即可。
由于父天平的判断显然需要子天平的总重量,因此可以考虑将总重量作为递归返回值。
不平衡时返回-1即可。

三、代码

#include <iostream>
using namespace std;

int input() {
    int wl, dl, wr, dr;
    cin >> wl >> dl >> wr >> dr;
    if(wl == 0) wl = input();
    if(wr == 0) wr = input();
    if(wl * dl != wr * dr) return -1;
    return wl + wr;
}

int main() {
    int kase;
    cin >> kase;
    while(kase --) {
        int res = input();
        cout << (res != -1 ? "YES\n" : "NO\n");
        if(kase) cout << endl;
    }
}

四、归纳

  • 写递归的代码时,要先想清楚父亲需要向儿子结点获得哪些信息,这些信息往往可以作为递归的返回值;当然有时也可以将信息维护在全局变量或数组中。