Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- error_reporting(E_ALL | E_STRICT);
- ini_set('display_errors', TRUE);
- ini_set('display_startup_errors', TRUE);
- function factory($n)
- {
- if(!$n)
- {
- return("Факториал числа $n не существует.");
- }
- else
- {
- if($n <= 1){return 1;}
- return $n * factory($n-1); // здесь происходит повторный вызов функции
- }
- }
- //echo factory(5); // 120
- function rec($n)
- {
- if($n > 100){
- echo 'Конец';
- } else {
- $n = rec($n+1);
- echo $n.'<br>';
- }
- }
- //echo rec(2);
- function r2($n)
- {
- if($n < 100){
- $n = r2($n+1);
- } else {
- echo $n.'Конец<br>';
- }
- }
- //echo r2(2);
- // Рекурсивный обход массива
- function recurs($w){
- if(!isset($e)){$e = '';}
- // если $w это массив
- if(is_array($w)){
- foreach($w as $str){
- $e .= recurs($str);
- }
- return $e;
- } else {
- return $w;
- }
- }
- $w = array(
- array(2,2,2,2,2),3,3,3,array(1,1,array(0,0,0,0,0),1,1)
- );
- //echo recurs($w);
- # Дано натуральное число 10. Выведите все числа от 1 до 10.
- function an($n)
- {
- if($n < 10+1){
- echo $n.'<br>';
- $n = an($n+1);
- }
- }
- //echo an(1);
- # Даны два целых числа A и В (каждое в отдельной строке).
- # Выведите все числа от A до B включительно, в порядке возрастания, если A < B, или в порядке убывания в противном случае.
- function ab($a, $b)
- {
- if($a < $b){
- echo $a.'<br>';
- $a = ab($a+1, $b);
- }
- if($a > $b){
- echo $a.'<br>';
- $a = ab($a-1, $b);
- }
- }
- //echo ab(3,15);
- # Дано натуральное число N.
- # Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае.
- # Операцией возведения в степень пользоваться нельзя!
- /* */
- function express($n){
- echo $n.'<br>';
- $var = $n % 2;
- if($n === 2){
- echo "Точная степень";
- }
- elseif($var === 0){
- $n = express($n/2);
- } else {
- echo "Не степень";
- }
- }
- //echo express(66);
- # Дано натуральное число N. Вычислите сумму его цифр.
- # При решении этой задачи нельзя использовать строки, списки, массивы (ну и циклы, разумеется).
- // Самый короткий
- $val = 123;
- //echo array_sum(str_split($val));
- // Алгорим длинный
- $num = 55894;
- $num = strval($num);
- $summ = 0;
- for ($i=0,$cnt = strlen($num); $i<$cnt; $i++) {
- $summ += $num[$i];
- }
- //echo $summ;
- // Алгоритмически правильный
- function summ($n){
- if(!isset($res)){$res = 0;}
- $var = $n % 10;
- $res = $res + $var;
- if($n < 10){
- $res += $n;
- return $res;
- } else {
- summ(floor($n / 10));
- }
- }
- $z = summ(123);
- //echo $z;
- /*
- Дано натуральное число n>1. Проверьте, является ли оно простым.
- Программа должна вывести слово YES, если число простое и NO, если число составное.
- Алгоритм должен иметь сложность O(logn).
- Указание. Понятно, что задача сама по себе нерекурсивна, т.к. проверка
- числа n на простоту никак не сводится к проверке на простоту меньших чисел.
- Поэтому нужно сделать еще один параметр рекурсии: делитель числа, и именно по этому параметру и делать рекурсию.
- */
- // Алгоритмически правильный
- function easytt($n){
- $m = ceil(sqrt($n));
- for ($i = 2; $i < $m+1; $i++) {
- $var = $n % $i;
- //echo " $n / $i = $var<br>";
- if($var === 0){
- //echo "$n Составное число, делится на $i<br>";
- return 0;
- }
- }
- return 1;
- }
- //$z = easytt(123);
- //echo $z;
- for ($i = 1; $i < 1202; $i++) {
- $z = 0;
- $z = easytt($i);
- if($z === 1){
- //echo "$i - простое число<br>";
- }
- }
- # Проверить является ли слово полиндромом
- function polindrom($n){
- for ($i = 0; $i < count($n); $i++) {
- //echo $n[$i].'<br>';
- }
- }
- //$w = polindrom('string');
- function pp($n){
- $old = $n;
- $new = '';
- if(strlen($n) === 0){
- return $new;
- } else {
- preg_match('/[a-z]$/ism', $n, $u);
- $new .= $u[0];
- $n = pp(preg_replace('/[a-z]$/ism', '', $n));
- }
- }
- function pp2($n, $a)
- {
- if(strlen($n) === 0){
- return $a;
- }
- else{
- preg_match('/[a-z]$/ism', $n, $u);
- $a .= $u[0];
- return pp2(preg_replace('/[a-z]$/ism', '', $n), $a);
- }
- }
- $word = 'deed';
- $w = pp2($word, '');
- if($word == $w){ echo 'Да это палиндром'; }
- var_dump($w);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement