iOS开发之UI基础--tableView展示斐波那契数列(Fibonacci)

斐波那契数列Fibonacci
斐波那契数列指的是这样一个 数列  0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368
特别指出:第0项是0,第1项是第一个1。
这个数列从第2项开始,每一项都等于前两项之和。
斐波那契 数列的发明者,是意大利数学家 列昂纳多·斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍贯是 比萨。他被人称作“比萨的 列昂纳多”。1202年,他撰写了《算盘全书》(Liber Abacci)一书。他是第一个研究了印度和阿拉伯数学理论的欧洲人。他的父亲被比萨的一家商业团体聘任为外交领事,派驻地点相当于今日的 阿尔及利亚地区,列昂纳多因此得以在一个阿拉伯老师的指导下研究数学。他还曾在埃及、 叙利亚、希腊、 西西里普罗旺斯等地研究数学。
通过tableview 展示  斐波那契数列Fibonacci
代码如下:
.h文件


#import <UIKit/UIKit.h>

@interface ViewController : UITableViewController


@end


.m文件


#import "ViewController.h"

@interface ViewController ()

@property (nonatomic,strong) NSArray *numberList;

@property (nonatomic,assign,getter=isDesc) BOOL desc;


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    
    
    [self loadData:^(NSArray *numbers) {
        //
        self.numberList = numbers;
        [self.tableView reloadData];
        self.navigationItem.title = @"Fibonacci";
        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"切换顺序" style:UIBarButtonItemStylePlain target:self action:@selector(sortList)];
    }];
    
    
}
- (void)sortList
{
    self.desc = !self.isDesc;
    self.numberList = [self.numberList sortedArrayUsingComparator:^NSComparisonResult(NSNumber *obj1, NSNumber *obj2) {
        //
        return self.desc ? obj1.integerValue < obj2.integerValue : obj1.integerValue > obj2.integerValue;
        
    }];
    [self.tableView reloadData];
}
/// 异步加载 Fibonacci 数列

- (void)loadData:(void (^)(NSArray *numbers))finished
{
    
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        //
        NSArray *array = [self fibonacci:INT8_MAX];
        dispatch_sync(dispatch_get_main_queue(), ^{
            //
            finished(array);
        });
    });
    
    
    
}
//计算 Fibonacci 数列
- (NSArray *)fibonacci:(int)n
{
    if (n<2) {
        return nil;
    }
    NSMutableArray *arrayM = [NSMutableArray arrayWithObjects:@"0",@"1", nil];
    
    for (int i = 2; i < n; ++i) {
        long fib1 = [arrayM[i - 1] integerValue];
        long fib2 = [arrayM[i - 2] integerValue];
        
        if (fib1 + fib2 > UINT8_MAX) {
            NSLog(@"%d",i);
            break;
        }

        [arrayM addObject:@(fib1 + fib2)];
    }
    return arrayM;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.numberList.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
    NSInteger row = indexPath.row;
    if (self.isDesc) {
        row = self.numberList.count - row - 1;
        
    }
    cell.textLabel.text = [NSString stringWithFormat:@"n:%zd - fib:%zd",row,[self.numberList[indexPath.row]integerValue]];
    return cell;
}


                          
@end




实现效果图:
                                     


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值