标题:初学递归错误,想不通哪地方有问题,
只看楼主
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
结帖率:100%
已结贴  问题点数:20 回复次数:19 
初学递归错误,想不通哪地方有问题,
//额不是故意来C语言发贴的,实在是高手都来C了。。

#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;
    }
    else
    {
        b=a(n-1)*n;//提示这地方有错
        return b;      
    }
cout << b<< endl;
}
//以下是错误信息
#1
Code
Start
prog.cc: In function 'void a(int)':
prog.cc:19:17: error: invalid operands of types 'void' and 'int' to binary 'operator*'
         b=a(n-1)*n;
           ~~~~~~^~
prog.cc:20:16: error: return-statement with a value, in function returning 'void' [-fpermissive]
         return b ;
                ^
搜索更多相关主题的帖子: function 递归 void int 错误 
2020-01-12 18:08
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:20 
这个错和递归没关系
你想把a(n-1)当数来用它就得有个返回值啊
int a(int n)才是
另外,你坚持往同一个坑里面掉:
你的函数a仍然不是每个分支都有返回值。
收到的鲜花
  • 叶纤2020-01-12 19:32 送鲜花  3朵   附言:太感谢了

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-01-12 18:28
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
我原来是按照图片用unsigned 声明函数,就是比图片多了个声明过程其他的几乎没动,可是别人可以运行起来但我的就是不行,然后我就尝试用int a(int);声明可是仍然报错
这是清华的一个女讲师发的一个关于递推的例题,看这个视频吐槽点挺多的,比如为啥if()后不加括号等等

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-12 18:54
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
不过她的递推思想和我差不多这就放心了,不过第一次尝试编写就遇到这事

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-12 18:56
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
算了我尝试完全用她的码看看能成功吗

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-12 18:59
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
if后面不带大括号正是为了让下面的return管两个分支的。
你正是因为加大括号加得不对才掉进坑里的。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-01-12 19:02
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
额😓是我找错老师了
#include<iostream>
using namespace std;

unsigned fac(unsigned n)
{   unsigned f;
    if(n==0)
        f=1;
    else
        f=fac(n-1)*n,
        return f;
}
int main()
{   unsigned n;
    cout << "vhjcgbcf" << endl;
    cin >> n;
    unsigned y=fac(n);
    cout << y<< endl;
    return 0;
}
//一模一样以下是报错信息
prog.cc: In function 'unsigned int fac(unsigned int)':
prog.cc:11:9: error: expected primary-expression before 'return'
         return f;
         ^~~~~~
prog.cc:12:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
1

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-12 19:13
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 


[此贴子已经被作者于2020-1-13 01:52编辑过]


把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-12 19:14
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 

该敲分号的地方你敲成逗号?

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-01-12 19:27
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 

#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 ;       //b在这里返回给int b,然后再进行ifelse循环这样才有返回值因为还有1的情况
   
}


[此贴子已经被作者于2020-1-13 01:38编辑过]


把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-12 19:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498912-1-1.html




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

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