def fib(n):
   if n<= 1: 
       return n 
   else: 
       return(fib(n-1)+fib(n-2))

def comp():
   L=[]
   for i in range(1,4000000): 
        if i % 2 ==0:
           L.append(fib(i))
           return sum(L)
print(comp())

Apa yang salah dengan kode ini? Itu tidak mengembalikan apa pun tetapi terlihat bagus menurut saya.

0
cavuscanay 15 Januari 2020, 15:44

2 jawaban

Jawaban Terbaik

Anda harus mengembalikan sum(L) dari fungsi bukan dari for loop ikuti kode di bawah ini

def fib(n):
    if n<= 1: 
        return n 
    else: 
        return(fib(n-1)+fib(n-2))

def comp():
    L=[]
    for i in range(1,20): 
        if i % 2 ==0:
            L.append(fib(i))
    return sum(L)

print(comp())

Dan hal lain melihat kisarannya terlalu banyak, karena ini akan memakan waktu atau dapat menghasilkan kesalahan terkait memori, jadi kurangi untuk pengujian.

0
The Guy 15 Januari 2020, 12:54

Pernyataan return disetel ke kenaikan yang salah. Ini dieksekusi pertama kali i % 2 == 0 menjadi true (yaitu i == 2 dalam kasus Anda).

def fib(n):
   if n<= 1: 
       return n 
   else: 
       return(fib(n-1)+fib(n-2))

def comp():
   L=[]
   for i in range(1,4000000): 
        if i % 2 ==0:
           L.append(fib(i))
   return sum(L)

print(comp())

Namun, kode di atas tidak akan berfungsi. Tahukah Anda seberapa besar angka ini akan didapat?

Mencoba

for i in range(1,40): 

Sebagai awal. Butuh beberapa detik di mesin saya. Hasilnya adalah 63245985.

0
offeltoffel 15 Januari 2020, 12:53