<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; Рекурсивный вызов функции]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=30653&amp;type=atom" />
	<updated>2013-09-29T17:39:37Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=30653</id>
		<entry>
			<title type="html"><![CDATA[Re: Рекурсивный вызов функции]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=366115#p366115" />
			<content type="html"><![CDATA[<p><strong>drBatty</strong>, премного благодарен за помощь. Получилось. Буду тестить.</p>]]></content>
			<author>
				<name><![CDATA[SkyLine]]></name>
				<uri>https://linuxforum.ru/profile.php?id=760</uri>
			</author>
			<updated>2013-09-29T17:39:37Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=366115#p366115</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Рекурсивный вызов функции]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=366084#p366084" />
			<content type="html"><![CDATA[<p>ещё $a тоже глобальная. А индекс вроде не в контексте.</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2013-09-29T16:06:58Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=366084#p366084</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Рекурсивный вызов функции]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=366083#p366083" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>SkyLine пишет:</cite><blockquote><p> Что снова с ней не так?</p></blockquote></div><p>не знаю. А почему index глобальный? Делайте уж всё локальным, и всё объявляйте.</p><p>И да, отладка так включается:<br /></p><div class="codebox"><pre><code>set -x</code></pre></div>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2013-09-29T16:05:36Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=366083#p366083</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Рекурсивный вызов функции]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=366076#p366076" />
			<content type="html"><![CDATA[<p>Да, пишу на bash.<br />Обьявил как локальную переменну и поставил вывод:</p><div class="codebox"><pre><code>local roww=$1
was[$roww]=1
echo row $roww</code></pre></div><p>и вот здесь:</p><div class="codebox"><pre><code>else
   echo find $a
   find $a
fi</code></pre></div><p>Теперь для матрицы вида:</p><div class="codebox"><pre><code>0 0 0 0
0 0 0 0
0 0 0 1
1 1 1 0</code></pre></div><p>Вывод такой(нумерация элементов с нуля):</p><div class="codebox"><pre><code>row 0
row 1
row 2
find 3
row 3
find 0
row 0
row 3
find 0
row 0</code></pre></div><p>Т.е. получается что функция переключается на первую строку (row 3, find 0). Что снова с ней не так?</p>]]></content>
			<author>
				<name><![CDATA[SkyLine]]></name>
				<uri>https://linuxforum.ru/profile.php?id=760</uri>
			</author>
			<updated>2013-09-29T15:48:45Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=366076#p366076</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Рекурсивный вызов функции]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=366070#p366070" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>SkyLine пишет:</cite><blockquote><p>roww=$1</p></blockquote></div><p>угу. Вот эта переменная на самом деле глобальная. Т.е. рекурсивный вызов её портит.</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2013-09-29T15:31:03Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=366070#p366070</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Рекурсивный вызов функции]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=366068#p366068" />
			<content type="html"><![CDATA[<p>вы хоть ЯП пишите.</p><p>если это bash, то для вас локальные переменные нужны.</p><div class="quotebox"><blockquote><p>Variables local to the function may be declared with&nbsp; the&nbsp; local&nbsp; builtin&nbsp; command.<br />&nbsp; &nbsp; &nbsp; &nbsp;Ordinarily,&nbsp; variables&nbsp; and&nbsp; their&nbsp; values&nbsp; are shared between the function and its<br />&nbsp; &nbsp; &nbsp; &nbsp;caller.</p></blockquote></div><p>ну и не забудьте массивы объявить. А то некрасиво.</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2013-09-29T15:28:51Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=366068#p366068</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Рекурсивный вызов функции]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=366062#p366062" />
			<content type="html"><![CDATA[<p>Добрый день.<br />Пытаюсь обратиться из функции к самой же функции(рекурсивно).</p><p>Пример:</p><div class="codebox"><pre><code>#обход графа в глубину
function find {
        roww=$1
        was[$roww]=1 #массив пройденых вершин, отмечаем вершину как пройденую

        for((a=0; a&lt;$cols; a++)) #для каждой вершины графа цикл
                do
                        index=$((roww*cols+a)) #индекс элемента массива матрицы смежности
                        if [[ ${arr[$index]} -ge 1 ]] #если есть переход на другую вершину
                                then
                                        if [[ ${was[$a]} -ge 1 ]] #если она уже была пройедна, то цикл
                                                then
                                                        echo circle ${arr[$index]}
                                                        continue
                                                else
                                                        find $a #если не пройдена, то повторяем проход для найденой вершины
                                                fi
                                fi
                done 
}</code></pre></div><p>Вызываю функцию из цикла:</p><div class="codebox"><pre><code>for((b=0; b&lt;$cols; b++))
        do
                nullm #функция зануления массива was, зануляется для каждой вершины
                find $b #вызов функции
        done</code></pre></div><p>Проблема в том, что функия не вызывается повторно, если вершина не пройдена, т.е. отрабатывает только один раз. Прошу помочь найти ошибку или подсказать что делаю не так.</p>]]></content>
			<author>
				<name><![CDATA[SkyLine]]></name>
				<uri>https://linuxforum.ru/profile.php?id=760</uri>
			</author>
			<updated>2013-09-29T15:18:37Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=366062#p366062</id>
		</entry>
</feed>
