11
回答
写一个类似肥波那契数列的函数
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

第一个参数是初始值,是个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,其他语言也可以

举报
习总
发帖于5年前 11回/560阅
共有11个答案 最后回答: 5年前
本人来个非递归的,保证了效率,代码也不算太长,通用肥波
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

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;

}

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

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;

}

这个貌似是递归?

引用来自“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
这个不错啊,能看懂
--- 共有 1 条评论 ---
Xsank亲,不错就结贴吧,好想要分分哦! 5年前 回复

哎,怪我啊。

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

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


以为是Fibonacci的一个变种呢。

--- 共有 2 条评论 ---
vvtf额,详细内容那就没注意看了。 5年前 回复
习总也算是变种吧 5年前 回复
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;
	}
非递归的斐波那契数列

        

来个通俗易懂的:

# -*- 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))

顶部