当前位置:编程学习 > php >>

如何用PHP完成这个函数? - PHP进阶讨论

如何用PHP完成这个函数?不能用递归f(m,n)m=0时,f(m,n)=n+1m!=0 n=0时 f(m,n)=f(m-1,1)m!=0 n!=0时 f(m,n)=f(m-1,f(m,n-1))不能用递归,怎么写? 我想了一个下午了..想不清楚..
答案:
原帖由 于 2007-11-8 22:51 发表 [i][/url]再定义一个函数function g($m,$n){? ?? ???if($m==0){? ?? ?? ?? ?? ? f($m,$n);? ?? ???}elseif($m!=0&$n==0){? ?? ?? ?? ?? ?? ?? ?? ?f($m-1,1);? ?? ???}else{? ?? ?? ?? ?? ? f($m-1,f($m,$n-1));? ?? ???}}其实你的f(m,n)=f(m-1,f(m,n-1))已经递归了:titter: [/b]1、函数f未定义2、如果定义f函数,仍然是个递归函数3、函数g没有返回值
到技术吧网站查看回答详情>>
再定义一个函数[php]function g($m,$n){? ? ? ? if($m==0){? ? ? ? ? ? ? ? f($m,$n);? ? ? ? }elseif($m!=0&$n==0){? ? ? ? ? ? ? ? ? ? ? ? f($m-1,1);? ? ? ? }else{? ? ? ? ? ? ? ? f($m-1,f($m,$n-1));? ? ? ? }}[/php]其实你的f(m,n)=f(m-1,f(m,n-1))已经递归了:titter:
到技术吧网站查看回答详情>>
这个应用本身就属于递归调用,如果用循环来实现应该也可以,如果来分析一下的话其实这个调用是有漏洞的。如果m小于零,那么就成为死循环。如果m等于零,则直接返回n+1;如果m大于零:? ?? ?? ?? ?? ?? ? 如果n小于零,死循环;? ?? ?? ?? ?? ?? ? 如果n等于零会让m自减一到0为止,然后返回2;? ?? ?? ?? ?? ?? ? 如果n大于零,自减一到n等于1为止,然后就会m一直自减一,到0为止,然后返回2;
到技术吧网站查看回答详情>>
1、函数f就是他说的那个f了2、他本来给的就有一个递归3、函数f有返回值就可以了呀,反正都是调用函数f
到技术吧网站查看回答详情>>
其实最有效率的方法,应该是把那个f(m,n)的表达式用数学方法求出来,而程序代码只需要执行最简单的数值运算即可用[php] /* 运行下面的代码看看 */echo mathTest(3,4);$i = 0;function mathTest($m,$n){? ?? ? global $i;? ?? ? $i++;? ?? ?echo \"第 $i 次调用\";? ???if ($m == 0 ){? ?? ?? ???$rt = $n + 1;? ?? ?} elseif($m !=0 && $n ==0) {? ?? ?? ???$m_s = $m -1;? ?? ?? ???$rt = mathTest($m_s,1);? ?? ? } else {? ?? ?? ???$m_d = $m - 1;? ?? ?? ???$n_d = $n - 1;? ?? ?? ???$rt = mathTest($m_d,mathTest($m,$n_d));? ?? ?}? ?? ? return $rt;}[/php]
到技术吧网站查看回答详情>>

上一个:关闭php中的gzip函数
下一个:php自定义函数怎么编写?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,