好人一生平安
如果改成n-1为什么会有乱码 这个是有顺序的吗 改成n-1是不是 只能算10天以后的
如果改成n-1为什么会有乱码 这个是有顺序的吗 改成n-1是不是 只能算10天以后的
2016-12-19
程序运行从主函数开始,然后开始执行 int num = getPeachNumber(1); 这里调用getPeachNumber(int n) 函数,并把实参1传递给形参n 。在getPeachNumber(1)函数内部,n=1,if为假,就去执行num=(getPeachNumber(n-1)-1)/2 ,这里会先计算getPeachNumber(0)[n=1,n-1=0]的值,减一后除2再赋值给num,但是程序不是到getPeachNumber(0)的值(不是递归终止条件),就会再次调用getPeachNumber(int n),这一次把n=0,判断if为假,进入else去执行num=(getPeachNumber(-1)-1)/2 ;这里再次调用getPeachNumber(-1),重复上面过程,调用getPeachNumber(-2),不断往复,最后是死循环,程序崩溃。
提示:程序递归一定要有终止条件,而且程序终止程序要能实现, 刚才这个例子,递归是n==10,程序从n==1开始,并且n朝着负方向发展,递归终止无法达到,形成死循环。 全面写也可以在getPeachNumber(int n)中加上一条:
if(n==10)
{
? //递归结束条件
}
else if(n<1&&n>10) //这里发范围与实际结合的,不该有0次,超过十次,桃子吃完了。
{ printf("提示错误语句"; //自己编辑错误提示
return 0;
}
else if
{
num = getPeachNumber(n+1)*2+2; //这里是不应该用递归呢?
printf("第%d天所剩桃子%d个\n", ?, ?); //天数,所剩桃子个数
}
举报