Member 14517556 Ответов: 3

Печать произведения четных чисел числа Фибоначчи


n1 = 1
n2 = 2
sum = 0
for i in range(1,4000000):
    nth = n1 + n2
    n1 = n2
    n2 = nth
    if n1%2 == 0:
        sum += n1
    elif n2%2 == 0:
        sum += n2
print("the even terms sum is",sum)


это мой подход. Я использую pycharm, но в pycharm окно запуска ничего не печатает.Я использовал онлайн ide и я получал это:
"Лимит Времени Превышен"

Я новичок, поэтому, пожалуйста, объясните это немного подробнее

Что я уже пробовал:

n1 = 1
n2 = 2
sum = 0
for i in range(1,4000000):
    nth = n1 + n2
    n1 = n2
    n2 = nth
    if n1%2 == 0:
        sum += n1
    elif n2%2 == 0:
        sum += n2
print("the even terms sum is",sum)

3 Ответов

Рейтинг:
26

raddevus

Я дам вам быстрый 2-й ответ на ваш последующий комментарий.

Шаги, которые вы хотите предпринять, таковы::
1. переместите цикл for в функцию, которая принимает минимальные и максимальные значения цикла
2. верните сумму
3. вызовите функцию во внешнем цикле
4. каждый раз, когда выполняется внешний цикл, выводите значение суммы, чтобы вы могли видеть запущенный процесс (с выводом), даже если для запуска всей программы потребуется много времени.


Я не волшебник Python, и это непроверенный код, но он будет выглядеть примерно так:
Цикл будет работать 1-10, 11-20, 21-30 и т. д. до максимума (1000)

loopMultiplier = 0;
localSum = 0;
// this is the outer loop that calls the function doFib() multiple times
// each time thru the outer loop you will get a print so you can see it running
for x in range (1, 1000)
    localSum += doFib((loopMultiplier *x) +1, loopMultiplier * x)
    loopMultiplier += 10
    print("the even terms sum is ",localSum)

def doFib(minVal, maxVal) : 
   n1 = 1
   n2 = 2
   sum = 0
    for i in range(minVal,maxVal):
        nth = n1 + n2
        n1 = n2
        n2 = nth
        if n1%2 == 0:
            sum += n1
        elif n2%2 == 0:
            sum += n2
    return sum


Рейтинг:
14

raddevus

Он не делает никакой печати до тех пор, пока цикл for не будет завершен.
Оператор print выполняется только после того, как цикл for повторен 4 миллиона раз.

Вы получаете то, что вам нужно.

"Time Limit Exceeded"
сообщение, потому что это займет много времени.

Вы пробовали меньшее число в цикле for, чтобы увидеть, если вы что-то получите?

Попробуй:
for i in range(1,200):


Member 14517556

Да! Это сработало, но разве мы не можем использовать такие большие числа? Есть ли какой - нибудь другой способ сделать это? Если вы знаете один из них, пожалуйста, поделитесь. Спасибо за ваш ответ

Рейтинг:
1