Advertisement
zero50x

Все рекурсии

Dec 13th, 2016
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.65 KB | None | 0 0
  1. <?php
  2. error_reporting(E_ALL | E_STRICT);
  3. ini_set('display_errors', TRUE);
  4. ini_set('display_startup_errors', TRUE);
  5.  
  6. function factory($n)
  7. {
  8.    if(!$n)
  9.    {
  10.       return("Факториал числа $n не существует.");
  11.    }
  12.    else
  13.    {
  14.       if($n <= 1){return 1;}
  15.       return $n * factory($n-1); // здесь происходит повторный вызов функции
  16.    }
  17.  
  18. }
  19.  
  20. //echo factory(5);  // 120
  21.  
  22.  
  23.  
  24. function rec($n)
  25. {
  26.     if($n > 100){
  27.         echo 'Конец';
  28.     } else {
  29.         $n = rec($n+1);
  30.         echo $n.'<br>';
  31.     }
  32. }
  33.  
  34.  
  35. //echo rec(2);
  36.  
  37.  
  38. function r2($n)
  39. {
  40.     if($n < 100){
  41.         $n = r2($n+1);
  42.     } else {
  43.         echo $n.'Конец<br>';
  44.     }
  45. }
  46.  
  47. //echo r2(2);
  48.  
  49.  
  50.  
  51. // Рекурсивный обход массива
  52.  
  53.  function recurs($w){
  54.         if(!isset($e)){$e = '';}
  55.        
  56.         // если $w это массив
  57.         if(is_array($w)){
  58.             foreach($w as $str){
  59.                 $e .=  recurs($str);
  60.             }
  61.             return $e;
  62.         } else {
  63.             return $w;    
  64.         }
  65.     }
  66.      
  67. $w = array(
  68.     array(2,2,2,2,2),3,3,3,array(1,1,array(0,0,0,0,0),1,1)
  69. );
  70.  
  71. //echo recurs($w);
  72.  
  73.  
  74.  
  75.  
  76. # Дано натуральное число 10. Выведите все числа от 1 до 10.
  77.  
  78. function an($n)
  79. {
  80.     if($n < 10+1){
  81.         echo $n.'<br>';
  82.         $n = an($n+1);
  83.     }
  84. }
  85. //echo an(1);
  86.  
  87.  
  88. # Даны два целых числа A и В (каждое в отдельной строке).
  89. # Выведите все числа от A до B включительно, в порядке возрастания, если A < B, или в порядке убывания в противном случае.
  90.  
  91. function ab($a, $b)
  92. {
  93.     if($a < $b){
  94.         echo $a.'<br>';
  95.         $a = ab($a+1, $b);
  96.     }
  97.     if($a > $b){
  98.         echo $a.'<br>';
  99.         $a = ab($a-1, $b);
  100.     }
  101. }
  102. //echo ab(3,15);
  103.  
  104.  
  105. # Дано натуральное число N.
  106. # Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае.
  107. # Операцией возведения в степень пользоваться нельзя!
  108.  
  109. /* */
  110. function express($n){
  111.     echo $n.'<br>';
  112.    
  113.     $var = $n % 2;
  114.     if($n === 2){
  115.         echo "Точная степень";
  116.     }
  117.     elseif($var === 0){
  118.         $n = express($n/2);
  119.     } else {
  120.         echo "Не степень";
  121.     }
  122. }
  123. //echo express(66);
  124.  
  125.  
  126. # Дано натуральное число N. Вычислите сумму его цифр.
  127. # При решении этой задачи нельзя использовать строки, списки, массивы (ну и циклы, разумеется).
  128.  
  129.  
  130. // Самый короткий
  131. $val = 123;
  132. //echo array_sum(str_split($val));
  133.  
  134.  
  135. // Алгорим длинный
  136. $num = 55894;
  137. $num = strval($num);
  138. $summ = 0;
  139. for ($i=0,$cnt = strlen($num); $i<$cnt; $i++) {
  140.     $summ += $num[$i];
  141. }
  142. //echo $summ;
  143.  
  144.  
  145. // Алгоритмически правильный
  146. function summ($n){
  147.     if(!isset($res)){$res = 0;}
  148.  
  149.     $var = $n % 10;
  150.     $res = $res + $var;
  151.    
  152.     if($n < 10){
  153.         $res += $n;
  154.         return $res;
  155.     } else {
  156.         summ(floor($n / 10));
  157.     }
  158.  
  159. }
  160. $z = summ(123);
  161. //echo $z;
  162.  
  163.  
  164. /*
  165.     Дано натуральное число n>1. Проверьте, является ли оно простым.
  166.     Программа должна вывести слово YES, если число простое и NO, если число составное.
  167.     Алгоритм должен иметь сложность O(logn).
  168.     Указание. Понятно, что задача сама по себе нерекурсивна, т.к. проверка
  169.     числа n на простоту никак не сводится к проверке на простоту меньших чисел.
  170.     Поэтому нужно сделать еще один параметр рекурсии: делитель числа, и именно по этому параметру и делать рекурсию.
  171. */
  172.  
  173. // Алгоритмически правильный
  174. function easytt($n){
  175.     $m = ceil(sqrt($n));
  176.    
  177.     for ($i = 2; $i < $m+1; $i++) {
  178.         $var = $n % $i;
  179.         //echo " $n / $i = $var<br>";
  180.        
  181.         if($var === 0){
  182.             //echo "$n Составное число, делится на $i<br>";
  183.             return 0;
  184.         }
  185.     }
  186.    
  187.     return 1;
  188. }
  189. //$z = easytt(123);
  190. //echo $z;
  191.  
  192.     for ($i = 1; $i < 1202; $i++) {
  193.         $z = 0;
  194.         $z = easytt($i);
  195.         if($z === 1){
  196.             //echo "$i - простое число<br>";
  197.         }
  198.     }
  199.  
  200.  
  201. # Проверить является ли слово полиндромом
  202.  
  203. function polindrom($n){
  204.     for ($i = 0; $i < count($n); $i++) {
  205.         //echo $n[$i].'<br>';
  206.     }
  207. }
  208.  
  209. //$w = polindrom('string');
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217. function pp($n){
  218.     $old = $n;
  219.     $new = '';
  220.    
  221.     if(strlen($n) === 0){
  222.         return $new;
  223.     } else {
  224.       preg_match('/[a-z]$/ism', $n, $u);
  225.       $new .= $u[0];
  226.       $n = pp(preg_replace('/[a-z]$/ism', '', $n));
  227.     }
  228. }
  229.  
  230.  
  231. function pp2($n, $a)
  232. {
  233.       if(strlen($n) === 0){
  234.           return $a;
  235.       }
  236.       else{
  237.           preg_match('/[a-z]$/ism', $n, $u);
  238.           $a .= $u[0];
  239.           return pp2(preg_replace('/[a-z]$/ism', '', $n), $a);
  240.       }
  241. }
  242.  
  243. $word = 'deed';
  244. $w = pp2($word, '');
  245. if($word == $w){ echo 'Да это палиндром'; }
  246. var_dump($w);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement