隐藏的柜台?

时间:2017-05-31 08:50:40

标签: c

为了计算出现次数,例如,使用F#我可以这样做:

let l = [1, 2, 3, 3, 3, 4, 5, 5];
let rec f (l: int list) (n: int) :int =
    match l, n with
    | [], _                     -> 0
    | [x], n                    -> 1
    | x::xs when x <> n         -> f(xs, n)
    | x::xs when x = n          -> 1 + f(xs, n)

使用C,我通常使用一个计数器,每次递增时都存储结果,概念上类似于:

i += 1 + f(xs, n);
return i;

请考虑这个问题,我们有无数的蓝色和红色大理石。该函数应计算数字 n个大理石的序列使得三个具有相同颜色的大理石连续不会发生。

#include<stdio.h>

int count(int k, char last, char prev);
int up_count(int n);

int main(int argc, char const *argv[]){
        int n;
        printf("\n\nNumber of marbles:\n\n");
        scanf("%d", &n);
        printf("\n\nSequences: %d\n\n", up_count(n));
        return 0;
}



int count(int k, char last, char prev){
        if(k == 0)
                return 1;
        else{
                if(last == prev)
                        return (last == 'R') ? count(k - 1, 'B', last) : count(k - 1, 'R', last);
                else
                        return count(k - 1, 'R', last) + count(k - 1, 'B', last);
        }       
}       

int up_count(int k){
        return count(k, 'x', 'y');
}

up_countcount在哪里存储越来越多的序列?根据我的简短经验,如果没有累加器,该函数应该在基本情况下返回1

0 个答案:

没有答案