C语言猴子吃桃问题递归法 10
我写的是这样的:#include<stdio.h>voidmain(){longtao(intr_day);longx;intday,reverse_day;day=1;...
我写的是这样的:
#include <stdio.h>
void main()
{
long tao(int r_day);
long x;
int day,reverse_day;
day=1;
reverse_day=11-day;
x=tao(reverse_day);
printf("total=%d\n",x);
}
long tao(int r_day)
{
long y;
if(r_day==1)
y=1;
else
y=2*(tao(r_day-1)+1);
return y;
}
----------------------------
我的问题:
y=2*(tao(r_day-1)+1);
这一句怎样能写成 /2-1的形式?(第2天又将吃剩的桃子吃掉一半,又多吃了一个)
我在百度上看到一个解法是这样的:
#include <stdio.h>
const unsigned int &fun_last(const int &n,const int &day)
{
if(n<0) return -1;
if(day==1) return n;
return fun_last(2*(n+1),day-1); //当天剩n个,前一天剩下2*(n+1)个
}
int main(void)
{
int day=10,n=1;
printf("第一天摘下%d个桃子\n",fun_last(n,day));
return 0;
}
我对递归的概念不是很清晰,
他的这个解法是不是函数在递归到第10次调用的时候就直接返回一个值了?
而我的解法是不是第10次调用以后需要逐级回退(弹出栈)最后才得到最终的值?
而且他的参数和返回值都是引用,是不是都是从栈里直接取值,而不用拷贝各个形参和返回值变量?
感觉学谭教授的书很难写出他这样的代码。 展开
#include <stdio.h>
void main()
{
long tao(int r_day);
long x;
int day,reverse_day;
day=1;
reverse_day=11-day;
x=tao(reverse_day);
printf("total=%d\n",x);
}
long tao(int r_day)
{
long y;
if(r_day==1)
y=1;
else
y=2*(tao(r_day-1)+1);
return y;
}
----------------------------
我的问题:
y=2*(tao(r_day-1)+1);
这一句怎样能写成 /2-1的形式?(第2天又将吃剩的桃子吃掉一半,又多吃了一个)
我在百度上看到一个解法是这样的:
#include <stdio.h>
const unsigned int &fun_last(const int &n,const int &day)
{
if(n<0) return -1;
if(day==1) return n;
return fun_last(2*(n+1),day-1); //当天剩n个,前一天剩下2*(n+1)个
}
int main(void)
{
int day=10,n=1;
printf("第一天摘下%d个桃子\n",fun_last(n,day));
return 0;
}
我对递归的概念不是很清晰,
他的这个解法是不是函数在递归到第10次调用的时候就直接返回一个值了?
而我的解法是不是第10次调用以后需要逐级回退(弹出栈)最后才得到最终的值?
而且他的参数和返回值都是引用,是不是都是从栈里直接取值,而不用拷贝各个形参和返回值变量?
感觉学谭教授的书很难写出他这样的代码。 展开
17个回答
展开全部
你的递归函数些错了, 参考我些的:
int sb(n)
{
int m = 0;
if (1 == n) return 1;
return sb(n - 1) * 2 + ++m;
}
int sb(n)
{
int m = 0;
if (1 == n) return 1;
return sb(n - 1) * 2 + ++m;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询