팩토리얼은 반복문과 재귀적 방법으로 진행하여 보았다.
다음은 MainWindow이다
txtBlock 1개 -> txtBlock
txtBox 1개 -> txtNo
button 1개 ->button
listBox 1개 -> listBox
다음은 MainWindow의 코드이다.
<Window x:Class="A002_Factorial.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:A002_Factorial"
mc:Ignorable="d"
Title="팩토리얼" Height="450" Width="350">
<Grid HorizontalAlignment="Right" Width="350">
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="38,56,0,0" Text="다음 숫자의 팩토리얼을 계산!" TextWrapping="Wrap" VerticalAlignment="Top" Grid.ColumnSpan="2"/>
<TextBox x:Name="txtNo" HorizontalAlignment="Left" Margin="38,100,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" HorizontalContentAlignment="Center" Grid.ColumnSpan="2" Height="20"/>
<Button x:Name="button" Content="계산" HorizontalAlignment="Left" Margin="184,100,0,0" VerticalAlignment="Top" Width="124" Click="button_Click"/>
<ListBox x:Name="listBox" Margin="32,140,42,26" Grid.ColumnSpan="2"/>
</Grid>
</Window>
계산 버튼을 클릭했을 때
int x = int.Parse(txtNo.Text);
var watch = System.Diagnostics.Stopwatch.StartNew();
long rfact = rFactorial(x);
watch.Stop();
var elap = watch.ElapsedTicks;
string result = " Ticks = " + elap;
listBox.Items.Add(result);
watch = System.Diagnostics.Stopwatch.StartNew();
long fact = Factorial(x);
watch.Stop();
elap = watch.ElapsedTicks;
result = " Ticks = " + elap;
listBox.Items.Add(result);
listBox.Items.Add("Recursive : " + rfact);
listBox.Items.Add("반복문 : " + fact);
다음은 코드들을 자세히 설명한 것이다.
var watch = System.Diagnostics.Stopwatch.StartNew();
long rfact = rFactorial(x);
watch.Stop();
1 watch를 선언 후 실행시킨다.
2 재귀함수를 선언해준다 .
3 watch를 정지시킨다.
var elap = watch.ElapsedTicks;
string result = " Ticks = " + elap;
listBox.Items.Add(result);
1 ~2 재귀함수 수행시간을 Ticks 단위로 알려준다.
3 listBox에 reault값을 추가시킨다.
watch = System.Diagnostics.Stopwatch.StartNew();
long fact = Factorial(x);
watch.Stop();
1 watch를 실행시킨다.
2 반복문을 선언해준다.
3. watch를 종료시킨다.
elap = watch.ElapsedTicks;
result = " Ticks = " + elap;
listBox.Items.Add(result);
listBox.Items.Add("Recursive : " + rfact);
listBox.Items.Add("반복문 : " + fact);
1~2 반복문 수행시간을 Ticks 단위로 알려준다.
3 listBox에 reault값을 추가시킨다.
4~5 재귀함수와 반복문 을 listBox에 추가시킨다.
private long Factorial(int x)
{
long f = 1;
for (int i = 2; i <= x; i++)
f *= i;
return f;
}
반복문의 메서드를 생성하여 반복문에 해당되는 코드를 적어준다.
private long rFactorial(long x)
{
if (x == 1)
return 1;
else
return rFactorial(x - 1) * x;
}
재귀함수의 메서드를 생성하여 재귀함수에 해당되는 코드를 적어준다.
다음 밑에 화면은 실행화면이다.
'Algorithms' 카테고리의 다른 글
A005_SortWithGraph (0) | 2021.09.24 |
---|---|
A004_hanoi (0) | 2021.09.17 |
A003_fibo (0) | 2021.09.17 |
A001_Euclid (0) | 2021.09.16 |
알고리즘 이란? (0) | 2021.09.09 |