Предположим, у вас есть большой проект, написанный на c ++, который содержит тысячу файлов .cpp и тысячу файлов .h. И давайте предположим, что проект также зависит от десяти статических библиотек. Скажем, мы работаем над Windows, и мы строим наш проект в Visual Studio 20xx. Когда вы нажимаете Ctrl + F7 Visual Studio, чтобы начать компиляцию всего решения (предположим, что у нас есть только один проект в решении)
В чем смысл компиляции?
Второй этап компиляции выполняется Linker.Linker должен объединить весь объектный файл и построить окончательно вывод (который может быть исполняемым или библиотекой)
Шаги при связывании проекта
error LNK2001: unresolved external symbol "void __cdecl foo(void)" (?foo@@YAXXZ)
Наблюдение
Как решить эту ошибку
Ошибка времени компилятора:
Ошибка времени компоновщика
#pragma once
, чтобы компилятор не включал один заголовок если он уже был включен в текущий .cpp, который скомпилирован Попробуйте заменить:
def fact(n):
return 1 if(n == 1) else n * fact(n - 1)
на:
def fact(n):
return 1 if(n <= 1) else n * fact(n - 1)
. Если вы пройдете 2 одинаковых номера, вы попытаетесь вычислить fact(0)
(что вызовет fact(-1)
и fact(-2)
и т. д. до максимальной ошибки глубины рекурсии).
Вы должны попытаться избежать рекурсии для такой простой функции, как факториал числа. Рекурсия действительно мощная, но иногда ее используют без причины.
Вот код для итеративной версии факторной функции:
def fact(n):
result = 1
for i in range(2, n + 1):
result *= i
return result
Обратите внимание, что Maxime говорит в предыдущем ответ, это именно то, что у вас есть: ваша функция не рассматривает факториал 0.
Ваша глубина рекурсии выходит за пределы.
sys.setrecursionlimit(some_number)
Эта функция устанавливает максимальную глубину стека интерпретатора Python для ограничения. Этот предел предотвращает бесконечную рекурсию из-за переполнения стека C и сбой Python. Максимально возможный предел зависит от платформы. Пользователю может потребоваться установить лимит выше, когда у нее есть программа, требующая глубокой рекурсии и платформы, поддерживающей более высокий предел. Это должно быть сделано с осторожностью, потому что слишком высокий предел может привести к сбою. ref: Ошибка рекурсивной функции Python: «превышена максимальная глубина рекурсии» Рекурсия Python max, вопрос о sys.setrecursionlimit ()
Предел рекурсии по умолчанию в версии python 3.x и далее - только 2000. Если вы вызываете ту же функцию снова и снова более 2000 раз, вы получите максимальную ошибку глубины рекурсии. Идеальным подходом было бы написать логику без рекурсии. Но если вы все еще придерживаетесь рекурсии, измените предел рекурсии по умолчанию на:
import sys
sys.setrecursionlimit (10000) # Он устанавливает предел рекурсии на 10000.
Но вышеуказанное может не соответствовать всем вашим потребностям в определенных контекстах.