递归算法
时间:2011-03-28
来源:互联网
想学习点算法的知识。不过马上被递归的算法搞迷了。不知道函数该如何调用自身。
我想做个最简单的阶乘。1*2*3.。。。*10. 做和10的阶乘。 程序运行出差。怎么改改?
my $n = 10;
my $result = DiGui($n);
print "$result\n";
sub DiGui{
my $receive = @_;
if ($receive == 1) {
return 1;
}
else {
return $receive * DiGui($receive - 1);
}
}
作者: leigh111 发布时间: 2011-03-28
作者: zhlong8 发布时间: 2011-03-28
改成my $receive = shift @_; 就对了。
不过我不明白:因为函数DiGui只有一个参数,
my $receive = shift @_; 和 my $receive = @_; 有什么区别? 其实 $receive接收的都是 10啊。
作者: leigh111 发布时间: 2011-03-28
不过我不明白:因为函数DiGui只有一个参数,
my $receive = s ...
leigh111 发表于 2011-03-28 14:54
my $receive = shift @_; #这里$receive 得到的是传进函数的第一个参数
my $receive = @_; #这里$receive 得到的是传进函数参数的个数
作者: xfoucs 发布时间: 2011-03-28
作者: leigh111 发布时间: 2011-03-28
leigh111 发表于 2011-03-28 15:48
shift 就是移除数组的第一个元素,操作一次数组就少一个元素
这个递归函数就一个参数,你写成 my ($receive)=@_; 也可以
你要写成 my $receive=@_; 那$receive永远是参数个数1
作者: xfoucs 发布时间: 2011-03-28
谢谢您。
作者: leigh111 发布时间: 2011-03-28
perl最讲究的是“语境”二字。
子过程DiGui接受的参数是一个数组,即便只有一个元素,也是个数组!
用shift @_就把这个数组的第一个元素抛出来了,具体到你的这个题目就是把数组里面唯一的元素取出了。根据这个,你的代码也可以改写成这样:
- #! /usr/bin/perl -w
- my $n = 10;
- my $result = DiGui($n);
- print "$result\n";
-
- sub DiGui{
- my $receive = $_[0];
- if ($receive == 1) {
- return 1;
- }
- else {
- return $receive * DiGui($receive - 1);
- }
- }
- #! /usr/bin/perl -w
- my $n = 10;
- my $result = DiGui($n);
- print "$result\n";
-
- sub DiGui{
- return ($_[0] == 1) ? 1 : $_[0] * DiGui($_[0] - 1);
- }
作者: 昭襄王 发布时间: 2011-03-28
sub DiGui{
my ($receive) = @_;
return 1 if ($receive == 1);
return $receive * DiGui($receive - 1);
}
当你后来又想到要加一个参数时....
DiGui(10); # 一样是 = 10 * 9 * ... * 2 * 1
DiGui(10, 6); # =10 * 9 * .. * 6
my ($receive, $end) = @_;
return 1 if ($receive == 1);
return $end if ($receive == $end);
return $receive * DiGui($receive - 1);
作者: jason680 发布时间: 2011-03-28
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28