Mam problemy z napisaniem w języku C# następującego programu z wykorzystaniem rekurencji:
Mamy trzy pręty i n krążków o różnych średnicach, które są nanizane są na pierwszy pręt w porządku malejących średnic tworząc wieżę. Chcemy przenieść krążki z pierwszego pręta na drugi, przy pomocy pręta trzeciego stosując następujące zasady:
- w każdym kroku można przenieść dokładnie jeden krążek
- krążek nie może być nigdy nałożony na krążek o mniejszej średnicy
[C#] wieża Hanoi
- Mariusz M
- Użytkownik
- Posty: 6908
- Rejestracja: 25 wrz 2007, o 01:03
- Płeć: Mężczyzna
- Lokalizacja: 53°02'N 18°35'E
- Podziękował: 2 razy
- Pomógł: 1246 razy
[C#] wieża Hanoi
Sama funkcja w języku C wygląda następująco
Kod: Zaznacz cały
void hanoi(int n, int start, int finish, int extra)
{
if (n > 0) {
hanoi(n-1, start, extra, finish);
printf("Move disc %d from %c to %c.
", n, 64+start, 64+finish);
hanoi(n-1, extra, finish, start);
}
}
-
- Użytkownik
- Posty: 860
- Rejestracja: 18 cze 2007, o 20:57
- Płeć: Kobieta
- Lokalizacja: Rybnik
- Podziękował: 86 razy
- Pomógł: 57 razy
[C#] wieża Hanoi
nie wychodzi mi ten program, zrobiłam, tak, ze ostatni pręt jest pomocniczy, a na drugi pręt mam przełożyć
Kod: Zaznacz cały
using System;
using System.Collections.Generic;
using System.Text;
namespace WizeHanoi
{
class Program
{
static void Main(char[] args)
{
uint n;
Console.Write("Podaj liczbe krazkow: ");
n = Convert.ToUInt16(Console.ReadLine());
Hanoi(n, "X", "Y", "Z");
Console.ReadKey();
}
static void Hanoi(uint n, char x, char y, char z)
{
if (n == 0)
throw new ArgumentException("Liczba krazków musi byc wieksza nie zero");
if (n == 1)
{
Console.WriteLine("Przenis z pretu {0} na pręt {1}.", x, y);
}
else
{
Hanoi(n - 1, x, z, y);
Console.WriteLine("Przenis z pretu {0} na pręt {1}.", x,y);
Hanoi(n - 1, z, y, x);
}
}
}
}
- Szemek
- Użytkownik
- Posty: 4819
- Rejestracja: 10 paź 2006, o 23:03
- Płeć: Mężczyzna
- Lokalizacja: Gdańsk
- Podziękował: 43 razy
- Pomógł: 1407 razy
[C#] wieża Hanoi
poprawiłem błąd przy wywołaniu funkcji Hanoi, tzn. kolejność i typy argumentów
Kod: Zaznacz cały
using System;
using System.Collections.Generic;
using System.Text;
namespace WizeHanoi
{
class Program
{
static void Main(string[] args)
{
uint n;
Console.Write("Podaj liczbę krążków: ");
n = Convert.ToUInt16(Console.ReadLine());
Hanoi(n, 'X', 'Z', 'Y');
Console.ReadKey();
}
static void Hanoi(uint n, char x, char y, char z)
{
if (n == 0)
throw new ArgumentException("Liczba krażków musi być większa niż zero");
if (n == 1)
{
Console.WriteLine("Przenieś z prętu {0} na pręt {1}.", x, y);
}
else
{
Hanoi(n - 1, x, z, y);
Console.WriteLine("Przenieś z prętu {0} na pręt {1}.", x, y);
Hanoi(n - 1, z, y, x);
}
}
}
}
-
- Użytkownik
- Posty: 860
- Rejestracja: 18 cze 2007, o 20:57
- Płeć: Kobieta
- Lokalizacja: Rybnik
- Podziękował: 86 razy
- Pomógł: 57 razy
[C#] wieża Hanoi
program sie sypie w sumie tylko dla wyjątków (0 i ujemnych)-- 8 czerwca 2009, 09:52 --nie umię sobie poradzić z wyjatkami, wiem że powyższy program ich nie zwraca i te dwie linie są bezsensu