Maison développement back-end tutoriel php PHP中递归函数的一个常见逻辑问题

PHP中递归函数的一个常见逻辑问题

Jun 23, 2016 pm 01:51 PM
php 函数 常见 递归 逻辑

首先,我们得知道递归函数是什么东西,通俗来讲也就是自己调用自己本身的函数。

现在需要设计一段代码,解决1到10叠加的问题。

代码A:

<?php //递归函数	$num=10;	function add($sum){		static $tot;		if($sum>=1){			$tot+=$sum;			add(--$sum);		}else{			return $tot;		}	}	echo add($num);?&gt;
Copier après la connexion
代码B:

<?php //递归函数	$num=10;	function add($sum){		static $tot;		if($sum>=1){			$tot+=$sum;			return add(--$sum);		}else{			return $tot;		}	}	echo add($num);?&gt;
Copier après la connexion
A中打印不出想要的结果,B中可以实现。而A和B代码中的唯一差别就是在if中添加了一个return。

下面就开始分析整个递归的过程,完全可以去看看盗梦空间加深理解了:(以不能实现的A代码为例)

1.将10带入函数中,if语句判断之后,$tot开始叠加。

2.这里重点来了:将参数减一之后重新带入函数中。(没有返回值!!!)

3.接着上面的过程一直循环,一直到$sum=1,这从外到内,由10到1,这10层的循环都没有返回值。

4.$sum=0的时候,要求有返回值。

就好像,盗梦空间中,主角在11层梦境中醒来,但是前面10层的梦境都处于睡眠阶段。这主角你觉得醒的过来吗,明显不可能。他只能卡在第11层梦境,永远醒不过来。

唯一能让主角醒过来的办法也就是他的每一层梦醒都醒过来,一直回到现实生活中。而相对与A代码,B代码则从第一层开始就要求有返回值,一直到11层都要有返回值。所以11层醒过来之后激活了第10层,然后一层一层的激活,最后就顺利醒过来了,这个最后的结果也就正确输出了。

怪不得他们说盗梦空间用递归函数很好解释,想来确实有点。

剩下的就是自己再深入理解了,一上来确实会有点晕。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian

Configuration du projet CakePHP Configuration du projet CakePHP Sep 10, 2024 pm 05:25 PM

Configuration du projet CakePHP

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Date et heure de CakePHP

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Téléchargement de fichiers CakePHP

Routage CakePHP Routage CakePHP Sep 10, 2024 pm 05:25 PM

Routage CakePHP

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

Discuter de CakePHP

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Comment configurer Visual Studio Code (VS Code) pour le développement PHP

Guide rapide CakePHP Guide rapide CakePHP Sep 10, 2024 pm 05:27 PM

Guide rapide CakePHP

See all articles