怎么将这个递归改成循环呢?

[复制链接]
查看11 | 回复8 | 2021-1-27 05:44:15 | 显示全部楼层 |阅读模式
#include
intpow(inta,intn)
{
intt=1;
while(n--)t*=a;
returnt;
}
voidfoo(intn,intlevel,ints,intp)
{
if(level
程序比较简单,应该不需要太多解释了吧,最好不用栈来模拟,请大牛帮忙
分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:44:15 | 显示全部楼层
foo(n,level+1,10*s+i,p+pow(i,n));觉得是foo(n,level+1,10*s+i,p+pow(i,level));才对
回复

使用道具 举报

千问 | 2021-1-27 05:44:15 | 显示全部楼层
最通俗的方法就是,枚举所有的数[0,10000000]
回复

使用道具 举报

千问 | 2021-1-27 05:44:15 | 显示全部楼层
不用堆栈模拟的话,有点难吧?想不到怎么转换你的程序,坐等高手。
回复

使用道具 举报

千问 | 2021-1-27 05:44:15 | 显示全部楼层
楼主这个递归程序循环了10000003次,程序一共消耗1500k内存空间
而且一般递归要转成非递归的话除非是堆栈溢出导致程序崩溃,否则的话递归的可读性比非递归的好的多,建议楼主就用这个递归的程序,我试了下如果要转的话,除非是枚举了......那还不如直接递归
回复

使用道具 举报

千问 | 2021-1-27 05:44:15 | 显示全部楼层

#include
longPow(a,b)
{
longr=1;
for(inti=1;i
回复

使用道具 举报

千问 | 2021-1-27 05:44:15 | 显示全部楼层
pow忘了参数类型了,晕
#include
staticlongpow(inta,intn)
{
longt=1;
while(n--)
{
t*=a;
}
returnt;
}
staticvoidfoo(intn)
{
for(longi=pow(10,n-1);i
回复

使用道具 举报

千问 | 2021-1-27 05:44:15 | 显示全部楼层
#include
intpow(inta,intn)
{
intt=1;
while(n--)
t*=a;
returnt;
}
voidfoo(intn,intlevel,ints,intp)
{
inti1,i2,i3,i4,i5,i6,i7;
inttmplevel1,tmps1,tmpp1;
tmplevel1=level;tmps1=s;tmpp1=p;
for(i1=(level==0);i1
亲自验证,结果一样,用的cpp文件格式。
回复

使用道具 举报

千问 | 2021-1-27 05:44:15 | 显示全部楼层
楼上的枚举无法展现出原程序中递归所蕴含的逻辑。
楼主可以给分了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行