如何设计递归算法
1.确定递归公式
2.确定边界(终了)条件
递归的一般模式
procedure aaa(k:integer);
begin
if k=1 then (边界条件及必要操作)
else begin
aaa(k-1);
(重复的操作);
end;
end;
C#:例子
例:一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少。
public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static int Foo(int i) { if (i <= 0) return 0; else if(i > 0 && i <= 2) return 1; else return Foo(i -1) + Foo(i - 2); } }
又如:
procedure a;
begin
.
.
.
a;
.
.
.
end;
这种方式是直接调用.
又如:
procedure c(形参);forward;
procedure b;
局部说明
begin
. .
c(实参);
. .
end;
procedure c;
局部说明;
begin
. .
b;
. .
end;
这种方式是间接调用.
例1计算n!可用递归公式如下:
fac:=n*fac(n-1) {当n>0时}
fac(n)={
fac:=1; { 当n=0时}
可编写程序如下:
program facn;
var
n:integer;
function fac(n:integer):real;
begin
if n=0
then fac:=1
else fac:=n*fac(n-1);
end;
begin
write('n=');readln(n);
writeln(n,'!=',fac(n):0:0);
end. JavaScript:例子//递归算法//递归算法function recursionAlgorithm(num){ if(num <= 1)//判断如果num小于等于1的情况下,返回本身 { return 1; }else { return num * arguments.callee(num - 1); //调用函数本身进行返回 }}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。