Diskuze: Rekurze (Depth search)
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Vůbec nerozumím, co ten tvůj kód má dělat, ale můžeš to zkusit takto:
private Uzel DepthSearch(Uzel poc)
{
if (poc.testKonce())
{
//nalezeno
return poc;
}
else
{
if (poc.naslednici != null)
{
foreach (Uzel u in poc.naslednici)
{
return DepthSearch(u);
}
}
}
}
spis
private Uzel DepthSearch(Uzel poc)
{
if (poc.testKonce())
{
//nalezeno
return poc;
}
else
{
if (poc.naslednici != null)
{
foreach (Uzel u in poc.naslednici)
{
return DepthSearch(u);
}
}
else
return null;
}
}
Snažím se implementovat hledání do hloubky (vrátím první uzel, který
splňuje podmínku).
Tyto možnosti a mnoho dalších sem zkoušel a nic, ale také si myslím, že
by to mělo být takto: tento zápis se ale nelíbí překladači a hlásí
uváděnou chybu.
//hledaní do hloubky
private Uzel DepthSearch(Uzel poc)
{
if (poc.testKonce())
{
//nalezeno řešení
return poc;
}
else
{
if (poc.naslednici != null)
{
foreach (Uzel u in poc.naslednici)
{
return DepthSearch(u);
}
} else return null;
}
// přidáním returnu uspokojím překladač, v jiném místě pořád hlásí "not all code path return value"
}
Pokud jsem dobře pochopil tak by mělo fungovat tohle:
private Uzel DepthSearch(Uzel poc){
if (poc.testKonce())
return poc;
if(poc.naslednici!=null){
foreach(Uzel u in poc.naslednici){
Uzel mem;
if((mem=DepthSearch(u))!=null)return mem;
}
}
return null;
}
Hlavně ti uniklo vůbec fungování metod a návratových hodnot, tím bych
začal
Zobrazeno 7 zpráv z 7.