首页 > 代码库 > 递归入门引例
递归入门引例
【一】两个最基本的例子
//阶乘
function fac(a:longint):longint; begin if a<2 then fac:=1 else fac:=a*fac(a-1); end;
//费波那契数列
function fab(a:longint):longint; begin if a<=2 then fab:=1 else fac:=fab(a-2)+fab(a-1); end;
【二】求各位数字之和
输入一个正整数N(0 <= N <= 2147483647),求它的各位数字之和。
//一般方法
readln(n); s:=0; while n>0 do begin s:=s+n mod 10; n:=n div 10; end; writeln(s);
//递归方法
function sum(a:longint):longint; begin if a<10 then sum:=a else sum:=(a mod 10)+sum(a div 10); end;
【三】超级楼梯
一个共有20个台阶的楼梯,从下面走到上面。一次只能迈一个台阶或两个台阶,并且不能后退,走完这个楼梯共有多少种方法。
分析:
1步台阶只有1种走法(1)
2步台阶2种(11、2)
3步台阶有3种(111、12、21)
4步台阶有5种(1111、112、121、211、22)
5步台阶有8种(11111、1112、1121、1211、122、2111、212、221)
6步台阶有13种(111111、11112、11121、11211、1122、12111,1212、1221、2111、2112、2121、2211、222)
function stair(n:longint):longint; begin if n=1 then exit(1); if n=2 then exit(2); stair:=stair(n-1)+stair(n-2); end; begin writeln(stair(20)); end.
【四】小明在桌上排列20枚,求不允许出现连续两次正面的排列方法数。
递归入门引例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。