私の友人は、いくつかの条件に基づいて系列を作成しようとしている計算上の問題を解決するのを助けました。彼は再帰でJSを使用しました。私はこれをObj-Cに翻訳して座り込み、困惑しています。再帰的JS関数をObj-Cに変換する
私は以下の出発点を持っています。アイデアは、再帰的なブロックを使用することでした、それは正しいアプローチですか?ブロックと再帰は私の周りに頭を上げるのは本当に難しいです。下のスケルトンは正しいトラックにありますか?
JSバージョン
function series(F, S, Y, N = 0, result = []) {
var entry
if (N < 2) {
entry = N * (F + S * (N - 1))
} else {
entry = (F + S * (N - 1))
}
if (entry > Y) {
return result
}
result.push(entry)
return series(F, S, Y, N + 1, result)
}
// series (90, 30, 200)
// (5) [0, 90, 120, 150, 180]
のObj-Cバージョンの試みの開始 - 申し訳ありませんが、これはブロックの必要はありません醜い
-(NSArray*) seriesWithF:(int)_F S:(int)_S Y:(int)_Y {
int F = _F;
int S = _S;
int Y = _Y;
int N = 0;
NSMutableArray* result = [NSMutableArray init];
__block void (^series)(int, int, int, int, NSMutableArray*) =^void (int F, int S, int Y, int N, NSMutableArray* result)
{
// logic
int entry = [result of logic]
[result addObject:[NSNumber initWithInt:entry]];
series(F, S, Y, N, result);
}
series(F, S, Y, N, result);
return result;
}
ところで:私は、法の必要性が表示されません。どちらも、それを 'NSArray'の関数またはメソッドにする必要があり、最後のパラメータは省略します。少なくともそれはクラスメソッドでなければなりません。 (そして、NSArrayクラスのメソッドとメソッドをまとめておけば、便利なアロケータのように見えます)。 –