Python:每日一题87(答题领鱼币)
题目:我们都知道斐波那契数列,它的下一个数为前两个之和,前12个如下:
1123581321345589144
下面我们稍微改变一下规则,如果算出的下一个数是偶数,则取它被2整除的值,前12个如下:
123549131112233529
为了使数列不都为1,从1和2开始。
写出这个函数。
def newfib(n)
......
n的取值从1开始。
我的解法:
**** Hidden Message *****
本帖最后由 chunchun2017 于 2017-8-28 09:12 编辑
def newfib(n):
list0=
if n>1:
list0.append(2)
for i in range(2,n):
temp=list0+list0
if(temp%2==0):
temp=temp//2
list0.append(temp)
return list0
n=int(input('请输入N的值:'))
print(newfib(n))
======================
运行结果:
请输入N的值:1
请输入N的值:2
请输入N的值:8
def newfib(n):
a, b = 1, 2
result = []
for i in range(n):
result.append(a)
if (a+b)%2 == 0:
a, b = b, (a+b)//2
else:
a, b = b, a+b
return result
def fib(cnt):
a,b=1,2
while cnt:
print(a)
a,b=b,a+b
if b%2 == 0:
b = b//2
cnt -= 1
fib(12)
# so easy def fun(n):
if n == 1 or n == 2:
return n
elif (fun(n-1) + fun(n-2)) % 2:
return fun(n-1) + fun(n-2)
else:
return (fun(n-1) + fun(n-2)) // 2
n = int(input('shuru:'))
for x in range(n):
print(fun(x+1), end=' ') 本帖最后由 wc365 于 2017-8-27 21:24 编辑
def newfib(n):
if n ==1:
return 1
if n == 2:
return 2
else:
temp = newfib(n-1) + newfib(n-2)
if temp%2 != 0:
return temp
else:
return temp//2
str1 = []
n = int(input("请输入一个自然数:"))
for i in range(n):
str1.append(newfib(i+1))
print(str1) chunchun2017 发表于 2017-8-27 10:48
======================
运行结果:
请输入N的值:8
你代码有问题,输入1返回的值是
不信你试试 def newfib(n):
print(n,n+1,sep = "\n")
t = 2
while True:
x = n + t
if x % 2 == 0:
print(int(x / 2))
n = t
t = x / 2
else:
print(int(x))
n = t
t = x def newfib(n):
a=
if n>1:
a.append(2)
if n>2:
for i in range (n-2):
b=a+a
if b % 2 == 0:
a.append(int(b/2))
else:
a.append(b)
return(a) def newfibRecursive(n):
if type(n) != int or n < 1:
rerurn - 1
if n <= 2:
return n
else:
re = newfibRecursive(n - 1) + newfibRecursive(n - 2)
if re % 2 == 0:
return int(re / 2)
else:
return int(re)
def newfibIterative(n):
if type(n) != int or n < 1:
rerurn - 1
if n <= 2:
return n
else:
pre = 1
cur = 2
for i in range(3, n + 1):
re = pre + cur
if re % 2 == 0:
re = re / 2
pre = cur
cur = re
return int(re) 悲伤的自由 发表于 2017-8-27 22:05
你代码有问题,输入1返回的值是
不信你试试
谢谢提醒,确实是考虑不周,已经修改了代码 def newfib(n):
mylist=
mylist.extend(int(mylist+mylist) if (mylist+mylist)%2==1 else int((mylist+mylist)/2) for i in range(3,n+1) )
print (mylist) def newfib(n):
if n == 1:
return 1
if n == 2:
return 2
temp = newfib(n-1) + newfib(n-2)
if temp % 2 ==0:
return temp //2
else:
return temp
newfib1 = []
n = int(input("请输入一个自然数:"))
for i in range(n):
newfib1.append(newfib(i+1))
print(newfib1) 本帖最后由 foolwolf0068 于 2017-8-28 19:44 编辑
def Fibs(n):
if n == 1:
return 1
elif n == 2:
return 2
else:
c = Fibs(n-1) + Fibs(n-2)
return (int(c/2) if (c % 2) == 0 else c)
def newfib(n):
return
print(newfib(12)) 本帖最后由 wwb_coco 于 2017-8-28 22:37 编辑
def newfib(n):
if n < 1:
return -1
elif n < 3:
return n
else:
fib = newfib(n - 1) + newfib(n - 2);
if fib % 2 == 0:
return int(fib/2)
else:
return fib
num = int(input('计算前多少个新斐波那契数列元素: '))
for i in range(1, num+1):
print('第%d个: %d' % (i, newfib(i)))
PS:递归好慢啊啊啊啊啊啊啊啊啊 数列形式变化不大
def newfib(n):
a,b = 1,2
for i in range(1,n):
a,b = b, a+b if (a+b)%2 else (a+b)//2
return a def newfib(n):
list0=
if n>1:
list0.append(2)
for i in range(2,n):
temp=list0+list0
if(temp%2==0):
temp=temp//2
list0.append(temp)
return list0
n=int(input('请输入N的值:'))
print(newfib(n)) def newfib(n):
if n < 1:
return
if n == 1:
return
t =
for i in range(2, n):
tmp = (t[-1]+t[-2]) if (t[-1]+t[-2])%2 else (t[-1]+t[-2])//2
t.append(tmp)
return t
n=int(input())
print(newfib(n)) 看看 本帖最后由 bin132659 于 2017-8-29 16:02 编辑
# -*- coding:utf8 -*-
# /usr/bin/env python
def newfib(n):
fib =
for i in range(2,n):
newvault=fib+fib
if newvault%2 ==0:
newvault/=2
fib.append(newvault)
print fib
newfib(28)