递归学习(一)

1概念

  一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数).
  如:
  procedure a;
  begin
  .
  .
  .
  a;
  .
  .
  .
  end;
  这种方式是直接调用.
  又如:
  procedure b; procedure c;
  begin begin
  . .
  . .
  . .
  c; b;
  . .
  . .
  . .
  end; end;
  这种方式是间接调用.
  例1计算n!可用递归公式如下:
  1 当 n=0 时
  fac(n)={n*fac(n-1) 当n>0时
  可编写程序如下:
  program fac2;
  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('fac(',n,')=',fac(n):6:0);
  end.
  例2 楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序计算共有多少种不同的走法.
  设n阶台阶的走法数为f(n)
  显然有
  1 n=1
  f(n)={2 n=2
  f(n-1)+f(n-2) n>2
  可编程序如下:
  program louti;
  var n:integer;
  function f(x:integer):integer;
  begin
  if x=1 then f:=1 else
  if x=2 then f:=2 else f:=f(x-1)+f(x-2);
  end;
  begin
  write('n=');read(n);
  writeln('f(',n,')=',f(n))
  end.
  2 设计递归算法
1.递归式,就是如何将原问题划分成子问题。
2.递归出口,递归终止的条件,即最小子问题的求解,可以允许多个出口。
3.界函数,问题规模变化的函数,它保证递归的规模向出口条件靠拢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值