Раздел «Язык Си».PythonRecursion1:

Рекурсия

В каждой функции можно вызвать другую функцию.

Например, в функции carreLine(size, n) вызывается функция carre(size).

В рекурсивной функции вызывается САМА эта функция, но с ДРУГИМИ переменными.

Пример.

Функция рисует черточки (for) Рекурсивная функция рисует черточки
#!/local-home/student/Downloads/or/bin/python3
from turtleru import *
import math
краска=["красный", "зеленый", "синий", 
"желтый", "рыжий","коричневый", "фиолетовый"]

def dashW(size, n):
   размерПера(6)
   for i in range(n):
      цвет(краска[(n - 1)-i])
      пиши(i)
      пероВниз()
      вперед(size)
      пероВверх()
      вперед(size)

начало()
dashW(50,7)
конец()
#!/local-home/student/Downloads/or/bin/python3
from turtleru import *
import math
краска=["красный", "зеленый", "синий", 
"желтый", "рыжий","коричневый", "фиолетовый"]

def dashR(size, n):
   размерПера(6)
   цвет(краска[n-1])
   пиши(n)
# проверяем n
# если n > 0, можно рисовать
   if n > 0:
      пероВниз()
      вперед(size)
      пероВверх()
      вперед(size)
# вызываем функцию dashR с 
# с новым числом (n-1)
      dashR(size, n-1)


начало()
dashR(50,7)
конец()

Задача Квадраты.

Самый маленький квадрат (размер) рисуем первым. Все остальные квадраты больше на 20. Написать РЕКУРСИВНУЮ функцию def carreR(размер), которая рисует такую картинку. Писать с while.

Функция рисует квадрат если его размер < 300

Задача Круги

Самый большой круг (размер) рисуем первым. Все остальные круги больше на 20. Написать функцию def circleR(размер), которая рисует такую картинку. Писать с while.

Функция рисует круг если размер > 0

Наибольший общий делитель (РЕКУРСИЯ)

from turtleru import *
import math

# Функция ищет наибольший отрезок (линию)
# для двух других
# Алгоритм Евклида


краска=["красный", "зеленый", "синий",  "рыжий","коричневый", "желтый","фиолетовый"]



def evR(size1,size2,n):
   if size1 % size2 == 0:
      return size2
   
   размерПера(5)
   цвет(краска[n])
   пероВниз()
   пиши(size1)
# нарисуем две линии:
   пероВниз()
   цвет(краска[n%7])
   вперед(size1)
   цвет(краска[(n + 1)%7])
   пиши(size2)
   пероВниз()
   вперед(size2)

# подвинем черепаху вниз
   назад(size2)
   право(90)
   пероВверх()
   вперед(30)
   лево(90)
 
# вернем размер линии
   nod = evR(size2, size1 % size2,n+1)
   return nod

начало()
пероВверх()
встатьНа(-400,0)
nod=evR(228,336,0)
пиши (nod)
конец()

Задача Наибольший общий делитель для квадратов

Написать РЕКУРСИВНУЮ функцию NOD(size1, size2), которая ищет самый большой квадрат, из которого можно СОСТАВИТЬ квадрат size1 и квдарт size2.

Нарисовать все квадраты в центре.

Снежинка

Напишем рекурсивную программу для рисования луча снежинки:

from turtleru import *
import math
краска=["синий", "фиолетовый" ,"желтый", "красный","зеленый", "рыжий","коричневый" ]

def luchV(size,r,n,w):
   цвет(краска[0])
   размерПера(3)
   пероВниз()
# черепаха всегда должна быть в начале луча
   вперед(size)
   назад(size)
# если глубина 0, больше ничего не рисуем
# возвращаемся
   if n==0:
      return

# если глубина не 0
# будем рисовать дальше

# подвинем черепаху по лучу либо на size*2/3, либо на size/3
   вперед(size*r/3)
# нарисуем еще три ветки (луча)
   лево(60)
# рекурсивный вызов рисования самого левого луча
   luchV(size/3,r,n-1,краска[n%3])
# рекурсивный вызов рисования самого правого луча
   право(120)
   luchV(size/3,r,n-1,краска[n%3])
# рекурсивный вызов рисования центрального луча
   лево(60)
   luchV(size/3,r,n-1,краска[n%3])
# встали на место
   назад(size*r/3)
начало()
luchV(240,2,2,"синий")
конец()

Снежинка1

Написать функцию sn(size, n), которая из лучей рисует снежинку глубиной n

Можно нарисовать другой луч

from turtleru import *
import math
краска=["синий", "фиолетовый" ,"желтый", "красный","зеленый", "рыжий","коричневый" ]

def luchV(size,r,n,w):
   цвет(краска[0])
   размерПера(3)
   пероВниз()
# черепаха всегда должна быть в начале луча
   вперед(size)
   назад(size)
# если глубина 0, больше ничего не рисуем
# возвращаемся
   if n==0:
      return

# если глубина не 0
# будем рисовать дальше

# подвинем черепаху по лучу либо на size*2/3, либо на size/3
   вперед(size*r/3)
# нарисуем еще три ветки (луча)
   лево(60)
# рекурсивный вызов рисования самого левого луча
   luchV(size/3,r,n-1,краска[n%3])
# рекурсивный вызов рисования самого правого луча
   право(120)
   luchV(size/3,r,n-1,краска[n%3])
# рекурсивный вызов рисования центрального луча
   лево(60)
   luchV(size/3,r,n-1,краска[n%3])
# встали на место
   назад(size*r/3)

# луч "усиски вниз"

def luchN(size,r,n,w):
   цвет(w)
   размерПера(3)
   тт=где()
   пероВниз()
   вперед(size)
   назад(size)
   if n==0:
      
      return
   вперед(size*r/3)
   право(240)
   luchN(size/3,r,n-1,краска[n%3])
   лево(120)
   luchN(size/3,r,n-1,краска[n%3])
   право(60)
   luchN(size/3,r,n-1,краска[n%3])
   вперед(size*r/3)
   лево(180)

начало()
luchN(240,2,3,"синий")
конец()

Задача Снежинка2

Написать функцию, которая рисует луч с веками вверх и вниз

Снег

Нарисовать разные снежинки

-- TatyanaOvsyannikova2011 - 13 Jun 2017

Attachment sort Action Size Date Who Comment
dR.png manage 3.0 K 13 Jun 2017 - 13:57 TatyanaOvsyannikova2011  
dW.png manage 2.7 K 13 Jun 2017 - 13:57 TatyanaOvsyannikova2011  
krugi.png manage 9.8 K 13 Jun 2017 - 14:06 TatyanaOvsyannikova2011  
kvadrs.png manage 2.7 K 13 Jun 2017 - 14:06 TatyanaOvsyannikova2011  
nod1.png manage 6.3 K 13 Jun 2017 - 14:36 TatyanaOvsyannikova2011  
nodkv.png manage 1.9 K 13 Jun 2017 - 14:42 TatyanaOvsyannikova2011  
piramida.png manage 2.8 K 13 Jun 2017 - 14:51 TatyanaOvsyannikova2011  
lv1.png manage 1.8 K 14 Jun 2017 - 14:05 TatyanaOvsyannikova2011  
ln1.png manage 1.8 K 14 Jun 2017 - 14:20 TatyanaOvsyannikova2011  
ll1.png manage 2.6 K 14 Jun 2017 - 14:26 TatyanaOvsyannikova2011  
lll3.png manage 3.5 K 14 Jun 2017 - 14:33 TatyanaOvsyannikova2011  
sn1.png manage 7.4 K 14 Jun 2017 - 14:41 TatyanaOvsyannikova2011  
sn2.png manage 11.5 K 14 Jun 2017 - 14:42 TatyanaOvsyannikova2011  
snP.png manage 11.7 K 14 Jun 2017 - 14:42 TatyanaOvsyannikova2011  
snow1.png manage 16.4 K 14 Jun 2017 - 14:42 TatyanaOvsyannikova2011  
snow.png manage 3.3 K 14 Jun 2017 - 14:43 TatyanaOvsyannikova2011  
snZ1.png manage 10.4 K 14 Jun 2017 - 14:44 TatyanaOvsyannikova2011  
snNV2.png manage 9.0 K 14 Jun 2017 - 14:45 TatyanaOvsyannikova2011