gpt4 book ai didi

javascript - 将递归 JS 函数转换为 Obj-C

转载 作者:行者123 更新时间:2023-12-01 03:06:29 25 4
gpt4 key购买 nike

我的一个 friend 帮助我解决了一个计算问题,我试图根据某些条件创建一个系列。他使用了带有递归的JS。我坐下来将其翻译成 Obj-C,但被难住了。

我的出发点如下。这个想法是使用递归 block ,这是正确的方法吗? block 和递归对我来说真的很难理解。下面的骨架在正确的轨道上吗?

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;

}

最佳答案

不需要 block 。更直接的翻译作品:

- (NSArray *)series:(int)f s:(int)s y:(int)y n:(int)n result:(NSArray *)result {
int entry;
if (n < 2) {
entry = n * (f + s * (n - 1));
} else {
entry = (f + s * (n - 1));
}

if (entry > y) {
return result;
}

NSMutableArray *newResult = [result mutableCopy];
[newResult addObject:@(entry)];

return [self series:f s:s y:y n:n+1 result:newResult];
}

- (void)someOtherMethod {
NSArray *result = [self series:90 s:30 y:200 n:0 result:@[]];
NSLog(@"Result = %@", result);
}

关于javascript - 将递归 JS 函数转换为 Obj-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46136842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com