递归函数理解 递归函数运算过程
yuyutoo 2024-12-17 17:24 3 浏览 0 评论
递归函数:
递归函数即自调用函数,在函数体内部直接或间接地自己调用自己,即函数的嵌套调用是函数本身。
该函数必须有一种能够"停止调用"的机制,如使用if语句。该机制,被称为递归函数的"出口"。
实例1:
function f1($n){
echo $n." ";
$n++;
}
f1(5);
输出结果5
实例2:
function f1($n){
echo $n." ";
$n++;
if($n<10){
f1($n);
}
}
f1(5);
输出结果:5 6 7 8 9
实例3
<?php
function f1($n){
echo $n." ";
$n++;
if($n<10){
f1($n);
echo $n." ";
}
}
f1(5);
?>
输出结果:5 6 7 8 9 9 8 7 6
实例4
function test($n){
echo $n." ";
if($n>0)
test($n-1);
else
echo "<-->";
}
test(10)
输出结果:10 9 8 7 6 5 4 3 2 1 0 <-->
实例5
function test($n){
echo $n." ";
if($n>0)
test($n-1);
else
echo "<-->";
echo $n." ";
}
test(10)
输出结果:10 9 8 7 6 5 4 3 2 1 0 <-->0 1 2 3 4 5 6 7 8 9 10
讨论实际应用中的递归思想应用(阶乘的实现):
阶乘的数学定义:一个正整数的阶乘,是从1一直乘到它本身的乘积。
阶乘的一个基本算法是:
n的阶乘 = (n-1)的阶乘 * n;
其中,1的阶乘是1。
function jiecheng($n){
if($n == 1){ //1的阶乘是1(已知)
return 1;
}
//其他数的阶乘,是 (该数) * (该数减一的阶乘) 的乘积
return jiecheng($n-1) * $n;
}
$v1 = jiecheng(5);
echo "<br />v1 = $v1";
以下为该函数的模拟调用过程:
$v1 = jiecheng(5)
$v1 = jiecheng(4) * 5
$v1 = (jiecheng(3) * 4) * 5
$v1 = ((jiecheng(2) * 3) * 4) * 5
$v1 = (((jiecheng(1) * 2) * 3) * 4) * 5
特别注意:上一行jiecheng(1)表示要求1的阶乘,但1的阶乘是"已知"的,为1
$v1 = (((1 * 2) * 3) * 4) * 5
$v1 = ((2 * 3) * 4) * 5
$v1 = (6 * 4) * 5
$v1 = 24 * 5
$v1 = 120
递归函数在类中如何定义?
如: 改名键名的大小写在类中方法的编写
private function changeArrKey($array, $case = 0){
if(!is_array($array)) return $array;
$tempArray = array();
$do = ($case === 0)? "strtolower" : "strtoupper";
foreach ($array as $key=>$value){
$key = $do($key);
if(is_array($value)){
$value = self::changeArrKey($value); //self 代表当前类
}else{
$value = $do($value);
}
$tempArray[$key] = $value;
}
return $tempArray;
}
相关推荐
- 使用 Node.js、Canvas 和 FFmpeg 实时生成并推送视频流
-
1、背景和需求在许多实时视频应用场景中,我们需要动态生成实时视频流并将其推送到RTMP服务器。例如,我们可能需要生成一个实时显示当前时间的视频流,或者在游戏直播时显示实时弹幕等。本文将介绍如何使...
- 熊孩子高空泼墨,全楼都遭殃!父母的反应让全网点赞
-
自家熊孩子从楼上泼墨邻居晾的衣服、楼的外墙…无一幸免!事发后孩子父母的反应让全网点赞!5月21日,江苏宿迁。网友“宇兄宇弟”发了几条短视频,只见视频中阳台上晾晒的衣服全都被泼上了墨汁,楼下地上和楼外墙...
- 动态爬虫(ajax)-爬取bilibili热门视频信息
-
前言使用python爬虫爬取bilibli每日热门视频的数据使用的第三方软件包括requests、my_fake_useragent...
- 轻视频课程:AngularJS开发框架实用编程入门之一
-
这个基础课程将介绍知名的Google前端开发框架AngularJS的基础使用,包括:基本概述,数据绑定,指令,表达式,控制器,过滤器等基础内容课程内容:AngularJS核心功能数据绑定:自动同步视图...
- html5的video标签实现对m3u8格式视频(HLS)的支持 亲测可用
-
在切图网一个项目切图中遇到的,网页中嵌入视频理所当然用html5自带的video标签即可实现,也有比较主流的插件videojs,但是这个比较特别播放的视频是m3u8格式的(这种好像imacsaf...
- html5的video标签实现m3u8格式的支持,基于hls.min.js
-
切图网站的踩坑笔记,vue开发项目中通过api接口获取到了m3u8格式的音频,但是有的浏览器默认不支持,所以需要借助辅助手段来实现,下面介绍详细方法。什么是m3u8?m3u8是m3u的一种,是utf-...
- 基于 vue.js+xgplayer 开源音视频播放器组件
-
今天继续给小伙伴们分享一个西瓜视频播放器Vue组件XGPlayer-Vue。xgplayer-vue西瓜视频播放器xgplayer的vue.js版本组件。安装...
- 盘点戏精萌娃的搞笑日常,好看吗?
-
孩子们搞笑的日常。盘点戏精萌娃的搞笑日常。好看吗?你这不是难为我吗?这咋难为你了,你别怪我说话直,那你也别怪我下手重。我这一身傲骨还能不怕你威胁吗?就让你看这衣服好不好看,怎么这么费劲?衣服。...
- WEB页面页面播放实时视频流
-
业务述求需要在WEB端实时查看现场的视频监控(公司选型的是大华摄像机)1技术方案选型1.ffmpeg通过rtsp协议拉取视频流2.使用vlcmediaplayer组件拉取视频流,在...
- 科研笔记神器:??一边视频,一边笔记,轻松搞定B站视频学习
-
上一期,笔者介绍了一款笔记神器——Obsidian,它可以用于思维导图和知识管理。...
- 在网页上显示监控视频
-
最近需要在web项目中显示监控视频,采用了webrtc+webrtc-streamer+coturn的方案实现,能够在公网上做很低的延时,对于实时监控视频有很好的效果,是目前来讲比较好的一个选择方案...
- Node.js服务端使用ffmpeg压缩视频处理技巧
-
在Node.js中,我们可以使用fluent-ffmpeg进行视频的合并、拼接、修改、转码、压缩等操作。网上的资料有很多,但是大部分是英文的,对于普通开发者来说,要轻松地了解使用方法还是很有难度的。...
- 杜淳晒女儿跑步萌态,1岁小蛋饺步伐超稳,全身肉嘟嘟可爱爆棚
-
4月27日下午,杜淳在个人社交平台分享了一段女儿小蛋饺跑步的萌态,老父亲还感慨写道:“奔跑吧,我的小蛋饺,跑着跑着就长大了,我的小公主”。杜淳自从升级奶爸后,这“女儿奴”属性真是愈发明显了,每一次晒与...
- 8款测试HLS m3u8视频流的免费在线播放器
-
翻译:Alex技术审校:纪永康本文来自OTTVerse,作者为KrishnaRaoVijayanagar。...
- HLS视频拉流播放
-
1、安装HlsVue.js是一个适用于构建用户界面的渐进型框架,它的流行程度已经在现代Web应用开发领域中得到了广泛的认可。而HLS(HTTPLiveStreaming)则是一种广泛应用于视频流媒...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)