| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3307 人关注过本帖
标题:初学递归错误,想不通哪地方有问题,
只看楼主 加入收藏
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
回复 9楼 forever74
大神( ゚皿゚)你真是一针见血,一个逗号都能找的到,厉害厉害,然后我把逗号改成分号呀成功运行了
不过会出现报警prog.cc: In function 'unsigned int fac(unsigned int)':
prog.cc:9:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
     else
     ^~~~
prog.cc:11:9: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
         return f;
         ^~~~~~
vhjcgbcf
6
0

这个是我的报警
prog.cc: In function 'int a(int)':
prog.cc:22:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
6
0

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-12 19:43
momotianxin
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-6-22
收藏
得分:0 
先看代码
#include<iostream>
using namespace std;
void a (int );
//(n-1)n递归
int main()
{   int n;
    cin>>n;
    a(n);
}//4 3 2 1 0
void a ( int n)//第一处
{   int b;
    if(n==0)//第四处
    {   b=1;
    //return b;  第三处
    }
    else
    {
        b=a(n-1)*n;//提示这地方有错
        return b;      //第二处
    }
cout << b<< endl;
}






收到的鲜花
  • 叶纤2020-01-13 11:53 送鲜花  2朵   附言:谢谢你的回答,
2020-01-13 11:43
momotianxin
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-6-22
收藏
得分:0 
回复 12楼 momotianxin
有毒吧,剩下的话发表不出来了
2020-01-13 11:44
momotianxin
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-6-22
收藏
得分:0 
回复 12楼 momotianxin
emm.....就我所理解的来说吧:
首先,第一处 ,为什么大家都不建议取a等单个字母为函数名,我觉得其一,如果在一个文件内出现了全局变量a等情况,和你这个函数名冲突了。你可以去看下,编程规范,比如华为编程规范,这样你就可以避免很多语法格式错误。
2020-01-13 11:44
momotianxin
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-6-22
收藏
得分:0 
回复 14楼 momotianxin
其次,第二处,既然你是用递归方法,我的理解递归就是 在运算时是一个循环,等循环到了一个节点,然后就退出,也就是说,你这代码会一直不停的调用,违反了有穷性;我第三,建议将第三处的代码放到第二处。
第四,还有楼上所说,函数的返回值类型要对应一致;
第五, 如果考虑编译器问题 if(n==0) 建议写成if(0==n)
2020-01-13 11:45
momotianxin
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-6-22
收藏
得分:0 
回复 15楼 momotianxin
还得分开发
2020-01-13 11:45
momotianxin
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-6-22
收藏
得分:0 
回复 15楼 momotianxin
有所不对,还请指教
2020-01-13 11:45
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
回复 12楼 momotianxin
#include<iostream>
using namespace std;
int a (int );
//(n-1)n
int main()
{   int n;
    cin>>n;
  a(n);
    cout<<a(n);

}//4 3 2 1 0
int a ( int n)
{  
    int b;
    if(n==0)
    {   b=1;
    }
    else
       { b=n*a(n-1);}
        return b ;      
   
}
这里已经被改正,不过有了新的疑问。
为什么别人可以用void  fun(int   a);来声明函数而我这里把int a(int n)  变成void a(int n)会大量报错?

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-13 11:54
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
变量命名规则我写的确实不规范,很容易被误解为i,j。曾经看过一个文章说外国人都把i j等大部分是用在for循环中,如果用在其他地方会造成误解,还有变量名取读音相同的也不好,因为在讨论的时候很容易被误解,因为我现在是初学阶段是在学习思想的一个过程,所以确实变量命名不怎能规范,也感谢您的提醒

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-13 12:06
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
回复 15楼 momotianxin
你说的把n==0,变成0==n在递推中最后不要这么用,我也是查过资料的,具体原因我也迷糊不清,不过文章说不要这么用

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-13 12:13
快速回复:初学递归错误,想不通哪地方有问题,
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032538 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved