피보나치 수열은 반복문과 재귀적 방법으로 진행하여 보았다.
다음은 MainWindow이다.
txtblock 1개
txtbox 1개
button 1개
listbox 1개
다음은 MainWindow의 코드이다.
<Window x:Class="A003_fibo.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:A003_fibo"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="446">
<Grid>
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="62,57,0,0" Text="다음 항까지의 피보나치 수열을 계산!" TextWrapping="Wrap" VerticalAlignment="Top"/>
<TextBox x:Name="txtNo" HorizontalAlignment="Left" Margin="62,95,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" HorizontalContentAlignment="Center"/>
<Button x:Name="button" Content="계산!" HorizontalAlignment="Left" Margin="205,95,0,0" VerticalAlignment="Top" Width="57" Click="button_Click"/>
<ListBox x:Name="listBox" Margin="60,143,0,41" HorizontalAlignment="Left" Width="330"/>
</Grid>
</Window>
계산 버튼을 클릭했을 때
int n = int.Parse(txtNo.Text);
listBox.Items.Clear();
listBox.Items.Add("Recursive Fibonacci");
var watch = System.Diagnostics.Stopwatch.StartNew();
for (int i = 1; i <= n; i++)
{
listBox.Items.Add(Fibonacci(i));
}
watch.Stop();
var elap = watch.ElapsedTicks;
listBox.Items.Add("Ticks = " + elap + ", ms = " + watch.ElapsedMilliseconds);
int[] fibo = new int[101];
watch = System.Diagnostics.Stopwatch.StartNew();
for (int i = 1; i <= n; i++)
{
if (i == 1 || i == 2)
fibo[i] = 1;
else
fibo[i] = fibo[i - 1] + fibo[i - 2];
}
watch.Stop();
elap = watch.ElapsedTicks;
listBox.Items.Add("Loop Fibonacci");
for (int i = 1; i <= n; i++)
{
listBox.Items.Add(fibo[i]);
}
listBox.Items.Add("Ticks = " + elap + ", ms = " + watch.ElapsedMilliseconds);
다음은 코드들을 자세히 설명한 것이다.
int n = int.Parse(txtNo.Text);
listBox.Items.Clear();
listBox.Items.Add("Recursive Fibonacci");
1 txtNo 에서 입력받은 값을 int n에 저장한다.
2 listBox를 깨끗하게 한 번 지운다.
3. Recursive Fibonacci이라는 아이템을 listBox에 추가시켜준다.
var watch = System.Diagnostics.Stopwatch.StartNew();
for (int i = 1; i <= n; i++)
{
listBox.Items.Add(Fibonacci(i));
}
watch.Stop();
var elap = watch.ElapsedTicks;
listBox.Items.Add("Ticks = " + elap + ", ms = " + watch.ElapsedMilliseconds);
1~5 피보나치수열의 수행시간을 측정하는 함수이다.
6~7 피보나치수열의 수행시간을 Ticks 단위로 알려준다.
int[] fibo = new int[101];
watch = System.Diagnostics.Stopwatch.StartNew();
for (int i = 1; i <= n; i++)
{
if (i == 1 || i == 2)
fibo[i] = 1;
else
fibo[i] = fibo[i - 1] + fibo[i - 2];
}
watch.Stop();
elap = watch.ElapsedTicks;
listBox.Items.Add("Loop Fibonacci");
for (int i = 1; i <= n; i++)
{
listBox.Items.Add(fibo[i]);
}
listBox.Items.Add("Ticks = " + elap + ", ms = " + watch.ElapsedMilliseconds);
private int Fibonacci(int i)
{
if (i == 1 || i == 2)
return 1;
else
return Fibonacci(i - 1) + Fibonacci(i - 2);
}
피보나치수열의 메서드를 생성하여 피보나치수열에 해당 되는 코드를 적어준다.
다음은 실행화면이다.
'Algorithms' 카테고리의 다른 글
A005_SortWithGraph (0) | 2021.09.24 |
---|---|
A004_hanoi (0) | 2021.09.17 |
A002_Factorial (0) | 2021.09.17 |
A001_Euclid (0) | 2021.09.16 |
알고리즘 이란? (0) | 2021.09.09 |