递归问题???

andywiliang 2008-05-07 02:10:27
#include <stdio.h>
int age(int n)
{int c;
if(n==1)c=10;
else c=age(n-1)+2
return c;
}
void main()
{printf("%d",age(5))
}

谁可以解释下吗?要很详细我才能明白,我是个新手
...全文
123 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
SOMMERS 2008-05-07
  • 打赏
  • 举报
回复
类似ACKERMAN函数,
SOMMERS 2008-05-07
  • 打赏
  • 举报
回复
#include <stdio.h>
int age(int n)
{
int c;
if(n==1)
{
c=10;//如果n=1,c=10
}
else
{
c=age(n-1)+2;
/*age(1) = 10
age(2) = age(1) + 2 = 12;
age(3) = age(2) + 2 = 14;
age(4) = age(3) + 2 = 16;
age(5) = age(4) + 2 = 18;*/
}
return c;
}
void main()
{
printf("%d",age(5));
}


核心是把递归搞透,
AndyLZ 2008-05-07
  • 打赏
  • 举报
回复
//貌似楼主是第二次发这贴了


#include <stdio.h>
int age(int n)
{
int c;
if(n==1)
{
c=10;//如果n=1,c=10
}
else
{
c=age(n-1)+2;//n=n-1,得出age(n)值,然后加上2一起赋给c,因为main()中给定n的值为5,所以一直循环(递归)到n=1
/*age(1) = 10
age(2) = age(1) + 2 = 12;
age(3) = age(2) + 2 = 14;
age(4) = age(3) + 2 = 16;
age(5) = age(4) + 2 = 18;*/
}
return c;
}
void main()
{
printf("%d",age(5));
}


//楼主,现在够详细了吧,结帖吧
lunarfan 2008-05-07
  • 打赏
  • 举报
回复
递推过程
n c
5 age(4)+2
4 age(3)+2
3 age(2)+2
2 age(1)+2
1 10
=====================
回归过程
n c
1 10
2 10+2
3 12+2
4 14+2
5 16+2
======================
够详细了吧
lunarfan 2008-05-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 andywiliang 的帖子:]
#include <stdio.h>
int age(int n)
{int c;
if(n==1)c=10;
else c=age(n-1)+2
return c;
}
void main()
{printf("%d",age(5))
}

谁可以解释下吗?要很详细我才能明白,我是个新手
[/Quote]
递推过程
5 c = age(4)+2
4 c = age(3)+2
3 c = age(2)+2
2 c = age(1)+2
1 c = 10
回归过程
10+2+2+2+2= 18
rangzh 2008-05-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 andywiliang 的帖子:]
#include <stdio.h>
int age(int n)
{int c;
if(n==1)c=10;
else c=age(n-1)+2
return c;
}
void main()
{printf("%d",age(5))
}

谁可以解释下吗?要很详细我才能明白,我是个新手
[/Quote]
age(5)=age(4)+2=age(3)+2+2=age(2)+2+2+2=age(1)+2+2+2+2=10+2+2+2+2=18
andywiliang 2008-05-07
  • 打赏
  • 举报
回复
5 5(16+2)=18
4 4(14+2)=16
3 3(12+2)=14
2 2(10+2)=12
1(10)=10

左边的54321是怎么来的?不是n-1出来的吧,哪他也要加2啊,5-1再加2,就是返回6啦

还有,怎么会有5个age()??????
c_spark 2008-05-07
  • 打赏
  • 举报
回复

5 5(16+2)=18
4 4(14+2)=16
3 3(12+2)=14
2 2(10+2)=12
1(10)=10
  • 打赏
  • 举报
回复
age(5):age(4):age(3):age(2):age(1)
age(1):10
age(2):12
age(3):14
age(4):16
age(5):18
如果编译成功的话,最后输出结果18
andywiliang 2008-05-07
  • 打赏
  • 举报
回复
就是不明白递归是怎样走法
  • 打赏
  • 举报
回复
#include <stdio.h>
int age(int n) //定义一个int型参数int型返回值的函数
{int c;
if(n==1)c=10; //判断传来的参数是否等于1,等于则c赋为10,否则递归
else c=age(n-1)+2 //记得加分号;表示一条语句的结束
return c;
}
void main()
{printf("%d",age(5)) //记得加分号;表示一条语句的结束
}
andywiliang 2008-05-07
  • 打赏
  • 举报
回复
age(5)就好像5个元素吗?age(1)是从哪里等于10的? if的条件根本就不能为真
kampan 2008-05-07
  • 打赏
  • 举报
回复
这位仁兄真是很耐心和热心!表扬!

[Quote=引用 3 楼 Jncryang 的回复:]
C/C++ code
#include <stdio.h>
int age(int n)
{
int c;
if(n==1) //n = 1时c==10
c=10;
else //当n!= 1时调用age(n - 1) + 2;
c = age(n-1) + 2;
return c;
}
void main()
{
//推导过程age(1) = 10
//age(2) = age(1) + 2 = 12;
//age(3) = age(2) + 2 = 14;
//age(4) = age(3) + 2 = 16;
//age(5) = age(4) + 2 = 18;

[/Quote]
Jncryang 2008-05-07
  • 打赏
  • 举报
回复

#include <stdio.h>
int age(int n)
{
int c;
if(n==1) //n = 1时c==10
c=10;
else //当n!= 1时调用age(n - 1) + 2;
c = age(n-1) + 2;
return c;
}
void main()
{
//推导过程age(1) = 10
//age(2) = age(1) + 2 = 12;
//age(3) = age(2) + 2 = 14;
//age(4) = age(3) + 2 = 16;
//age(5) = age(4) + 2 = 18;
printf("%d",age(5));
}

xiaoshu666 2008-05-07
  • 打赏
  • 举报
回复
这个不是书上的列子吗
我学c时就有他,谭浩强的那个c基础,解释的很详细了
babyvox1999 2008-05-07
  • 打赏
  • 举报
回复
age(5) = age(4)+2 = age(3)+2+2 = age(2)+2+2+2 = age(1)+2+2+2+2
age(1) = 10

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧