pascal 递归 求100+97+„„+10+7+4+1之和
答案:1 悬赏:40 手机版
解决时间 2021-04-02 22:34
- 提问者网友:末路
- 2021-04-02 11:30
pascal 递归 求100+97+„„+10+7+4+1之和
最佳答案
- 五星知识达人网友:詩光轨車
- 2021-04-02 12:18
function sum(s:longint):longint;
begin
if s=1 then exit(1);
exit(s+sum(s-3));
end;
begin
writeln(sum(100));
readln;
end.
或者可以在附件中下载.pas文件。
不过,如果LZ有志参加竞赛,一定别用递归做这种题,可以试试,这样一道简单的题都会运行很长时间。因为free pascal调用函数和过程是很费时间的。
如果真要编程,可以用递推、循环或数学公式(等差数列求和)。
追问function dg ( m : integer ) : integer ;
begin
if m <= 3 then dg := m else
dg := dg + dg ( m - 3 ) ;
end ;
这有什么错 ?
你的程序的exit ( ...... ) 是什么意思追答exit 中文就是“退出”之类的,在pascal中,就表示“退出调用函数”,在当前的函数中,之后的语句都不执行,直接退出函数,进入主程序。
而如果是 exit( ) 这种形式,就是“先让函数值赋值为括号内的数,再退出函数”。
比如:
var a,b:integer;
function judge(a,b:integer):boolean;
begin
if a=b then exit(true);
exit(false);
end;
begin
readln(a,b);
if judge(a,b) then write('YES')
else write('NO');
end.
输入 :2 2
输出 :YES
在调用函数 judge 时,执行到这一句:
if a=b then exit(true);
a确实等于b,因此judge函数就返回一个 true 值,并直接退出函数,而不执行
exit(false);
这句。
——————————————————————————-——————————
你的代码有大问题。
function dg(m:integer):integer;
begin
if m<=3 then dg:=m
else dg:=dg+dg(m-3); //这句语句不对,应该是 dg:=m+dg(m-3);
end;
一个小错就可能导致结果完全不对,原先的输出是-8532,而正确输出是1717.
begin
if s=1 then exit(1);
exit(s+sum(s-3));
end;
begin
writeln(sum(100));
readln;
end.
或者可以在附件中下载.pas文件。
不过,如果LZ有志参加竞赛,一定别用递归做这种题,可以试试,这样一道简单的题都会运行很长时间。因为free pascal调用函数和过程是很费时间的。
如果真要编程,可以用递推、循环或数学公式(等差数列求和)。
begin
if m <= 3 then dg := m else
dg := dg + dg ( m - 3 ) ;
end ;
这有什么错 ?
你的程序的exit ( ...... ) 是什么意思追答exit 中文就是“退出”之类的,在pascal中,就表示“退出调用函数”,在当前的函数中,之后的语句都不执行,直接退出函数,进入主程序。
而如果是 exit( ) 这种形式,就是“先让函数值赋值为括号内的数,再退出函数”。
比如:
var a,b:integer;
function judge(a,b:integer):boolean;
begin
if a=b then exit(true);
exit(false);
end;
begin
readln(a,b);
if judge(a,b) then write('YES')
else write('NO');
end.
输入 :2 2
输出 :YES
在调用函数 judge 时,执行到这一句:
if a=b then exit(true);
a确实等于b,因此judge函数就返回一个 true 值,并直接退出函数,而不执行
exit(false);
这句。
——————————————————————————-——————————
你的代码有大问题。
function dg(m:integer):integer;
begin
if m<=3 then dg:=m
else dg:=dg+dg(m-3); //这句语句不对,应该是 dg:=m+dg(m-3);
end;
一个小错就可能导致结果完全不对,原先的输出是-8532,而正确输出是1717.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯