各位c语言大侠们,小弟求问一题,我写的程序不对啊,递归难题 c语言...

下面是一个整数拆分问题的C语言代码,太深奥啦,我知道是递归,但是其余的就都看不懂啦调试时都蒙啦!求帮助
[问题点数:20分,结帖人helexyue]
下面是一个整数拆分问题的C语言代码,太深奥啦,我知道是递归,但是其余的就都看不懂啦调试时都蒙啦!求帮助
[问题点数:20分,结帖人helexyue]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
本帖子已过去太久远了,不再提供回复功能。共有 578 人关注过本帖
标题:小弟我很疑惑啊,【全部积分50】求递归问题。。。(谢谢各位大神!!!!)
等 级:论坛游民
帖 子:25
专家分:19
结帖率:100%
&&已结贴√
&&问题点数:50&&回复次数:10&&&
小弟我很疑惑啊,【全部积分50】求递归问题。。。(谢谢各位大神!!!!)
这是我写的一个简单的程序,想看看递归原理,失败。。。。。
#include&stdio.h&
void recursive(int n) ;
void main()
&&& scanf(&%d&,&a);
&&& printf(&\n\n\n&);
&&& recursive(a);
void recursive(int n)
&&& int t=1;&&&&&&&&/*第一个问题*/
&&& if(n==0)
&&&&&&&&printf(&结果出来了%d\n&,t++);
&&& else if(n%2==0)
&&&&&&&&recursive(n/2);
&&&&&&&&printf(&除以2&&%d\n&,t++);
&&& else if(n%2)
&&&&&&&&recursive(n-1);
&&&&&&&&printf(&减去1&&%d\n&,t++);
有几个问题:
(1) 就是在标注的地方定义了t的值,程序好像是每递归一次就从头开始,所以后面的t++都为一
但是,我把那个定义改为printf(&工作原理&);结果就只在刚开始的时候出现“工作原理”,后面都没有了,求解.
(2) 就是递归到最后的时候,是系统将递归中参数存起来了吗?
(3)递归运行的时候,顺序是怎样的,请就这个题说一下。
其实俺是递归那块没学懂,书上的也没这个,自己看也不懂。。
[ 本帖最后由 laazyt 于
13:48 编辑 ]
搜索更多相关主题的帖子:
等 级:论坛游民
帖 子:25
专家分:19
别让他沉了啊,小弟我在线等,谢谢
等 级:业余侠客
帖 子:77
专家分:225
你得先告诉别人:你的程序想做什么?
等 级:论坛游民
帖 子:25
专家分:19
回复 3楼 BJ_BOY
这就是个递归啊,比如输入5,递归,如果是2的倍数,调用这个数除以2作参数调用函数,如果是奇数,调用这个数减1作参数调用函数,如果是0,输出
等 级:业余侠客
帖 子:77
专家分:225
&&得分:20&
楼主,你上面的回答等于没回答:)哈哈,谁看不懂你说的那个意思呀。
据我猜测,你的程序应该改成下面的样子(在Dev C++中调试通过):
#include &stdio.h&
#include &stdlib.h&
void recursive(int n) ;
int main()
&&& scanf(&%d&,&a);
&&& printf(&\n\n\n&);
&&& recursive(a);
&&& system(&PAUSE&);
&&& return 0;
void recursive(int n)
&&& static int t=1;&&&&&&&&/*第一个问题*/
&&& if(n==0)
&&&&&&&&printf(&结果出来了%d\n&,t++);
&&& else if(n%2==0)
&&&&&&&&printf(&除以2&&%d\n&,t++);
&&&&&&&&recursive(n/2);
&&& else if(n%2)
&&&&&&&&printf(&减去1&&%d\n&,t++);
&&&&&&&&recursive(n-1);
执行示例结果如下:
结果出来了12
请按任意键继续. . .
======================================
至于你提到的那些问题,用文字回答起来很难,有些懒得去写,哈哈。如果可能,你找一本《C语言与程序设计大学教程》一书第8.5节:嵌套调用也递归调用,里面对递归程序的执行进行了很详细的分析。
等 级:业余侠客
帖 子:130
专家分:280
&&得分:30&
我估计楼主是不理解递归是咋回事,觉得那个过程用脑子很难取想清楚,导致觉得很难用。
我学的时候也是这样的。
其实最简单的理解就是,把递归中用到的部分用函数对应的部分代入就好了。
找了个例子,看看
void fun(int i)
printf(&%d\n&,i);
展开过程如下:
void fun(int i)
//fun(i/2);
printf(&%d\n&,i/4);
printf(&%d\n&,i/2);
printf(&%d\n&,i);
等 级:论坛游民
帖 子:25
专家分:19
回复 5楼 BJ_BOY
我是在递归那块不太懂,恩,static可以送到函数里面去,不被销毁,谢谢
等 级:论坛游民
帖 子:25
专家分:19
回复 6楼 毕业旅行
知我者也啊,大谢。。。
等 级:职业侠客
帖 子:111
专家分:334
回复 6楼 毕业旅行
等 级:新手上路
帖 子:20
版权所有,并保留所有权利。
Powered by , Processed in 0.029767 second(s), 9 queries.
Copyright&, BCCN.NET, All Rights ReservedC语言编写程序题:求n!的递归函数,要求用MAIN()函数输入n值。_百度知道
C语言编写程序题:求n!的递归函数,要求用MAIN()函数输入n值。
提问者采纳
#include &stdio.h&int fun(int n){ if(n==0||n==1) return 1; else return n*fun(n-1);}void main(){
scanf(&%d&,&n); printf(&%d!=%d\n&,n,fun(n));}
来自团队:
其他类似问题
为您推荐:
递归函数的相关知识
其他3条回答
int fun(int x){if(x==1) return 1;else return x*fun(x-1);}void main(){scanf(&%d&,&n);printf(&%d\n&,fun(n));}注意,14!已经超32位int范围了~~而且,fun函数没有做数据检验,请不要用1~14以外的数作为参数。。。
超过范围,就不要用int嘛,改用long 类型,long fun(int x){if(x==1) return 1;else return x*fun(x-1);}void main(){scanf(&%d&,&n);printf(&%ld\n&,fun(n));}
好久没写过C语言的程序了,希望对你有帮助#include&stdio.h&void main(){int n,s;scanf(&%d&,&n);s=funca(n)*funcb(n);printf(&%d\n&,s);}/* 求n^2 */int funca(int n){ int i,s1; s1=1; for(i=1;i&=n;i++) { s1=s1*2; }return(s1);}/* 求n! */int funcb(int n){ int s2; s2=1; for(i=n;i&=1;i--) { s2=s2*i; }return(s2);}
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言 求助帮小弟写个程序,问题如下!!_百度知道
C语言 求助帮小弟写个程序,问题如下!!
编写多个自定义函数,可自定义输入课程名称和学分,可输入学生成绩并统计平均绩点,并按平均绩点从高到低排序输出
请求大神指明下 实验思路!
提问者采纳
此类题目用结构体和链表比较好,且比较复杂,你看我写了许多,才5分,有点低哦!#include&stdio.h&#include&string.h&#define Fsizeof(student)#defineNULL 0typedefstruct scores{
int c_}TP;typedefstruct students{
char sid[15];
char name[15];
struct students *}student*input(){
student *head,*p1,*p2;
head=(student*)malloc(F);head-&next=NULL;
printf(&\n\nPlease input %d student message:
\n\n&,n);
printf(&\t%d student sid:
p1=(student *)malloc(F);p1-&next=NULL;
scanf(&%s&,p1-&sid);
printf(&\n\t%d student name:
scanf(&%s&,p1-&name);
printf(&\n\t%d student scores(englesh,math,c_language):
scanf(&%d,%d,%d&,&p1-&score.english,&p1-&score.math,&p1-&score.c_language);
p1-&score.all=p1-&score.english+p1-&score.math+p1-&score.c_
head-&next=p1;p2=p1; }
p2-&next=p1;
printf(&\n\n\t\t\tContinue or back (press y/n):
ch=getch();
}while(ch=='y'||ch=='Y');}voidaverage1(student *head){
student *p;
j=p-&score.all/3;
printf(&\n\nname:
%s\taverage: %d&,p-&name,j);
printf(&\n\n\nPress eny keyreturn.&);
getch();}voidaverage2(student *head){
student *p;intn=0,temp1=0,temp2=0,temp3=0;
temp1+=p-&score.
temp2+=p-&score.
temp3+=p-&score.c_
printf(&\n\naverage english is :%d\naverage math is : %d\naverage c_language is :%d\t&,temp1/n,temp2/n,temp3/n);}student*sort(student *head){
student *head1,*p,*q,*r; int temp1=0,temp2=0,temp3=0,temp4; char s[15],n[15];
for(p=head1-&p-&next!=NULL;p=p-&next)
for(q=p-&q;q=q-&next)
if(q-&score.all&r-&score.all)
strcpy(s,p-&sid);strcpy(n,p-&name);
temp1=p-&score.
temp2=p-&score.
temp3=p-&score.c_
temp4=p-&score.
strcpy(p-&sid,r-&sid);strcpy(p-&name,r-&name);
p-&score.english=r-&score.
p-&score.math=r-&score.
p-&score.c_language=r-&score.c_
p-&score.all=r-&score.
strcpy(r-&sid,s);strcpy(r-&name,n);
r-&score.english=temp1;
r-&score.math=temp2;
r-&score.c_language=temp3;
r-&score.all=temp4;
return head1;}voidoutput(student *head){
student *head2,*p;int i=1;
head2=sort(head);
for(p=head2-&p!=NULL;p=p-&next)
printf(&\n\nname: %s\tsid: %s\tenglish: %d\tmath: %d\tc_language:%d\taverage: %d\tmingci:%d&,p-&name,p-&sid,p-&score.english,p-&score.math,p-&score.c_language,p-&score.all/3,i++);
average2(head);
printf(&\n\n\n\t\tPresseny key back.&);
getch();}void main(){
student *head,*p1,*p2;
int i=0,j=1;
head=input();
printf(&\n\n(1): average1.\n\n(2): average2.\n\n(3): sort.\n\n(4):output.\n\n\n
Please choose:
scanf(&%d&,&i);
case 1: average1(head);
case 2: clrscr();average2(head); printf(&\n\n\nPress eny keyretuen.&);getch();
case 3: clrscr();p1=sort(head);
for(p2=p1-&p2!=NULL;p2=p2-&next)printf(&\n\t\tname:%s\tmingci:%d&,p2-&name,j++);printf(&\n\n\nPress eny keyback.&);getch();
case 4: output(head);
default: printf(&\nYour choose isnot right.&);
}while(i!=-1);}
提问者评价
其他类似问题
为您推荐:
c语言的相关知识
其他1条回答
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 递归难题 c语言 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信