一、题意
递归输入天平的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; } }
四、归纳
- 写递归的代码时,要先想清楚父亲需要向儿子结点获得哪些信息,这些信息往往可以作为递归的返回值;当然有时也可以将信息维护在全局变量或数组中。