Чтобы разделить один модуль на несколько, следует правильно экспортировать и импортировать все модули и компоненты:
app.module.ts * модуль «root»
@NgModule({
declarations: [
AppComponent,
],
imports: [
// angular
BrowserModule,
HttpClientModule,
// splitted modules
DiversityMattersModule,
PreventingAirPolutionModule,
PeacfullyRevolutionModule,
// ...
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {
}
[1110 ]iversity-Affairs.module.ts Пример модуля из списка выше
@NgModule({
imports: [
// ...
],
declarations: [
AwesomeComponent,
// ...
],
exports: [
AwesomeComponent,
// ...
],
})
Теперь разрешен каждый компонент, зависящий от AppComponent
импортировать AwesomeComponent
.
Эта статья объясняет рекурсию и имеет некоторые простые примеры C для того, чтобы пересечь связанный список и двоичное дерево
Один из лучших способов изучить рекурсию состоит в том, чтобы получить некоторый опыт на языке функционального программирования, таком как Haskell или Lisp или Схема.
Так нахождение рекурсивных проблем может быть уменьшено до нахождения некоторых проблем и ответов, связанных с языками функционального программирования. Вот является пример 99 проблемами шепелявости.
Действительно только требуется 5 минут для изучения Схемы или Lisp, таким образом, можно начать с примерами сразу же для теста завтра, Вы упомянули.
Другой отличный способ изучить рекурсию состоит в том, чтобы получить некоторую практику в математических доказательствах, включающих индукцию.
Ключевые понятия, касающиеся рекурсии:
С рекурсией Вы не должны знать, как решить проблему. Просто необходимо знать 2 вещи. 1) как решить самый маленький экземпляр проблемы и 2) как разбить его в меньшие части.
Эквивалентно, просто необходимо иметь в виду необходимость: 1) основной случай и 2) рекурсивный случай.
Основной случай обрабатывает 1 единственный экземпляр того, что Вы хотите сделать с самым маленьким входом.
Рекурсивный случай повреждает проблему в подпроблему. В конечном счете эта подпроблема уменьшит до основного случая.
Пример:
//1+...+n = n*n(+1)/2 = sumAll(n):
int sumAll(int x)
{
if(x == 0) //base case
return 0;
else
return sumAll(x-1) + x; //recursive case
}
Важно понять, что основной случай не трудно выяснить. Это просто должно существовать. Вот эквивалентное решение для x> 0:
//1+...+n = n*n(+1)/2 = sumAll(n):
int sumAll(int x)
{
if(x == 1) //base case
return 1;
else
return sumAll(x-1) + x; //recursive case
}
Я думаю, что синтаксис Haskell является большим для размышления рекурсивно, потому что конструкция сопоставления с образцом делает основной случай и рекурсивный случай настолько очевидными. Перевод этого на другой язык затем довольно прост.
sumAll [] = 0
sumAll (x:xs) = x + sumAll xs
Для понимания этого действительно только необходимо знать это
Вы не должны изучать всего Haskell (который является, давайте столкнемся с ним, трудно) - но выполнение некоторых основ, конечно, помогает Вам думать в рекурсии.
Это собирается походить на очень хромой ответ, но рекурсия является парадигмой, это часто очень твердо хвататься за первое для новичков. Потребуется больше чем размышление дня по предмету для Вашего друга для твердого схватывания понятия.
Можно хотеть сделать, чтобы он просмотрел Euler Проекта для потенциального направления для изучения.
Считайте SICP (Структура и интерпретация компьютерных программ)
#include<iostream>
using namesspace std;
int E(int x);
int main()
{
int x;
cout << E(x) << endl;
return 0;
}
int E(int x)
{
return x ? (x % 10 + E(x/10)) : 0;
}