写一个类似肥波那契数列的函数

习总 发布于 2013/03/04 18:27
阅读 641
收藏 0

第一个参数是初始值,是个list,第二个参数是生成列表的长度。
规律就是每一项都是前length(list)项累加, fib那个数列算是一个特例

例如:

f([1,1],10) ==> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

f([3,4],10) ==>[3, 4, 7, 11, 18, 29, 47, 76, 123, 199]

f([1,2,3],15) ==>[1, 2, 3, 6, 11, 20, 37, 68, 125, 230, 423, 778, 1431, 2632, 4841]

……  ……

不知道大家看明白没有

该怎么写呢?最好用Python,其他语言也可以

加载中
0
Xsank
Xsank
本人来个非递归的,保证了效率,代码也不算太长,通用肥波
def feibo(list,n):
	t=[]
	if n <=len(list):
		for i in range(n):
			t.append(list[i])
		return t
	else:
		t=list
		for i in range(n-len(list)):
			list.append(reduce(lambda a,b:a+b,t[i:]))
		return t
0
傅小黑
傅小黑
肥波那契。。。。肥波那。。。肥波。。。肥
抛出异常的爱
抛出异常的爱
回复 @习总 : 斐XX
习总
习总
那不然是什么数列呀
0
抛出异常的爱
抛出异常的爱

List  肥波(List my,int key){

    if(key == 1 ) return my;

    List list =  肥波(l,key-1);

    long sum =  0;

    for(Integer i : list){

      sum+=i;

   }

   list.add(sum);

  return list;

}

0
习总
习总

引用来自“抛出异常的爱”的答案

List  肥波(List my,int key){

    if(key == 1 ) return my;

    List list =  肥波(l,key-1);

    long sum =  0;

    for(Integer i : list){

      sum+=i;

   }

   list.add(sum);

  return list;

}

这个貌似是递归?
0
习总
习总

引用来自“Xsank”的答案

本人来个非递归的,保证了效率,代码也不算太长,通用肥波
def feibo(list,n):
	t=[]
	if n <=len(list):
		for i in range(n):
			t.append(list[i])
		return t
	else:
		t=list
		for i in range(n-len(list)):
			list.append(reduce(lambda a,b:a+b,t[i:]))
		return t
这个不错啊,能看懂
Xsank
Xsank
亲,不错就结贴吧,好想要分分哦!
0
vvtf
vvtf

哎,怪我啊。

我看到了一个字肥,然后看到了波那契数列

然后我的脑袋里提示的是  Fibonacci。。。


以为是Fibonacci的一个变种呢。

vvtf
vvtf
额,详细内容那就没注意看了。
习总
习总
也算是变种吧
0
Administra
Administra
Python 一行代码就行了
0
羅立安的眼光
羅立安的眼光
看到肥波我就笑喷了。。。
0
moyiguke
moyiguke
public static void main(String[] args){
		int[] array = getFibonacci(1,1,10);
		System.out.println(Arrays.toString(array));
	}
	/**
	 * 用循环的方法
	 * @param startNo1
	 * @param startNo2
	 * @param arraySize
	 * @return
	 */
	public static int[] getFibonacci(int startNo1 , int startNo2 , int arraySize){
		int[] fibonacciArray = null;
		if(arraySize > 1){
			fibonacciArray = new int[arraySize];
			fibonacciArray[0] = startNo1;
			fibonacciArray[1] = startNo2;
			for(int i = 2 ; i < arraySize ; i++){
				fibonacciArray[i] = fibonacciArray[i-1]+fibonacciArray[i-2];
			}
		}
		return 	fibonacciArray;
	}
非递归的斐波那契数列

                    
0
ZhouJunhua
ZhouJunhua

来个通俗易懂的:

# -*- encoding=utf-8 -*-
def f(a, l):
    if len(a) > l:
        return a
    r = a[:]
    for i in range(len(a), l):
        n = 0;
        for j in range(len(a)):
            n = n + r[i-j-1]
        r.append(n)
    return r
if __name__ == '__main__':
    print(f([1,1], 10))
    print(f([3,4], 10))
    print(f([1,2,3], 15))

返回顶部
顶部