p1130-递归与递推
描述 Description
我们要求找出具有下列性质数的个数(包含输入的自然数n):
先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理
l·不作任何处理:
2·茬它的左边加上一个自然数,但该自然数不能超过原数的一半;
3·加上数后,继续按此规则进行处理,直到不能再立生自然数为止。
样例: 输入: 6
满足条件的数为 6 (此部分不必输出)
16
26
126
36
136
输出: 6
输入格式 Input Format
自然数n
输出格式 Output Format
满足条件的数的个数
样例输入 Sample Input
6
样例输出 Sample Output
6
递推代码:
代码
var i,j,k,n:longint;
a:array[0..1001] of longint;
begin
assign(input,'input.txt'); reset(input);
assign(output,'output.txt'); rewrite(output);
readln(n);
for i:=1 to n do a[i]:=1; { 本身有一个数}
for i:=1 to n do {每个数的值都应该是1...n div 2的和}
for j:=1 to i div 2 do
a[i]:=a[i]+a[j];
writeln(a[n]);
close(input); close(output);
end.
a:array[0..1001] of longint;
begin
assign(input,'input.txt'); reset(input);
assign(output,'output.txt'); rewrite(output);
readln(n);
for i:=1 to n do a[i]:=1; { 本身有一个数}
for i:=1 to n do {每个数的值都应该是1...n div 2的和}
for j:=1 to i div 2 do
a[i]:=a[i]+a[j];
writeln(a[n]);
close(input); close(output);
end.
递归代码:
代码
var all,n:longint;
procedure search(m:longint);{在数据M左边添加数据}
var i,j:integer;
begin
all:=all+1;
for i:= m div 2 downto 1 do search(i);
end;
begin
assign(input,'input.txt'); reset(input);
assign(output,'output.txt'); rewrite(output);
readln(n);
all:=0;
search(n);
writeln(all);
close(input); close(output);
end.
procedure search(m:longint);{在数据M左边添加数据}
var i,j:integer;
begin
all:=all+1;
for i:= m div 2 downto 1 do search(i);
end;
begin
assign(input,'input.txt'); reset(input);
assign(output,'output.txt'); rewrite(output);
readln(n);
all:=0;
search(n);
writeln(all);
close(input); close(output);
end.