chyanog 发表于 2013-2-20 12:24:08

写一个类似于LinearRecurrence的函数

功能类似于Mathematica的LinearRecurrence,
f(init, n)最后一个参数是生成序列的长度(包含初始值),除了最后一个参数前面的是不定参数,表示初始值,
如:
f(1,1, 10)-->1, 1, 2, 3, 5, 8, 13, 21, 34, 55
f(2,3,4, 10)-->2, 3, 4, 9, 16, 29, 54, 99, 182, 335
f--> x, y, z, x + y + z, x + 2 y + 2 z, 2 x + 3 y + 4 z

mathematica 发表于 2013-2-20 12:36:08

循环呗,这个简单

wayne 发表于 2013-2-20 15:24:27

1# chyanog
这个,最好是这种格式:
f({x1,x2,x3,...},n)------>{x1,x2,x3,......}

chyanog 发表于 2013-2-20 17:47:46

3# wayne
这个可以随意,就是不太清楚C/C++能否也能这样写

wayne 发表于 2013-2-20 21:26:41

可以的,传入数组即可 ,例如:
void f(int arr[],int n)
==============================
如果初始数列有c个,那么,存在递推公式:
a=2*a-a

试着写了个C程序:
#include<stdio.h>
#include<stdlib.h>
int main(int c,char** v)
{
    if(c>2)
    {
      int len=atoi(v);
      if(len<c-2) return ;
      int tmp, arr,i;
      arr=0;
      for(i=0; i<c-2; ++i)
      {
            tmp=atoi(v);
            arr=tmp;
            arr+=arr;
      }
      while(++i<len) arr=2*arr-arr;
      for(i=0; i<len; ++i) printf("%d\t",arr);
    }
}
==============================================
C:\Users\yoyo\Desktop>a.exe 1 3 6 20
1       3       6       10      19      35      64      118   217   399   734   1350    2483    4567    8400    15450   28417   52267   96134   176818
C:\Users\yoyo\Desktop>a 1 1 10
1       1       2       3       5       8       13      21      34      55

chyanog 发表于 2013-2-21 16:57:18

5# wayne
这个关系式不错,我都没有发现呢

chyanog 发表于 2013-2-21 17:00:20

本帖最后由 chyanog 于 2013-2-21 17:27 编辑


f1 :=
Nest] - #[[-Length@init - 1]]}] &, #~Join~{Tr@#} &@init, n - Length@init]

f2 :=
Nest]}] &, init, n + 1 - Length@init]
写了两个Mathematica的版本,

无心人 发表于 2013-2-21 19:43:39

let fb l n = map (\(_, x) -> x) \$ take n (iterate (\(l, _)->((tail l)++, (head l))) (l, head l))

fb 10
页: [1]
查看完整版本: 写一个类似于LinearRecurrence的函数