为了账号安全,请及时绑定邮箱和手机立即绑定

我把递归函数中的猴子摘桃子问题改成静态变量static这里是哪里出了问题了?

#include <stdio.h>
int getPeachNumber(n)
{
    int num;    //定义所剩桃子数
    if(n==10)
    {
       return 1;       //递归结束条件
    } 
    else
    {
        static num=1;
        num =(num+1)*2;   //这里是不应该用递归呢?
        printf("第%d天所剩桃子%d个\n", n, num); //天数,所剩桃子个数
    }
    return num;
}
int main()
{
    int i;
    for(i=9,i<0,i--)
    {
        gerpeachNumber(i);
    }
    printf("猴子第一天摘了:%d个桃子。\n", num);
    return 0;
}


正在回答

10 回答

#include <stdio.h>

int getnumber(int n)    //定义getnumber是和天数有关的函数

{

    static int num=1;

    num=(num+1)*2;

    printf("第%d天剩%d个桃子。\n",n,num);

    return num;

}

main()

{

    int getnumber(int n);

    int i,z;

    for(i=9;i>0;i--)  //天数每天递减

    {

        z=getnumber(i);  //每次将z重新赋值为函数getnumber的返回值,得出循环到九天的桃子数

    }

    printf("猴子第一天有%d个桃子。",z);

 

}


0 回复 有任何疑惑可以回复我~

李同学,你的24行代码 getnumbei写错了

0 回复 有任何疑惑可以回复我~

大牛,你看我改了改这段程序问题出在哪里了?

#include <stdio.h>
int getnumber(int n)    //定义getnumber是和天数有关的函数
{
	static num=1;
	
	
	num=(num+1)*2;
	
	printf("第%d天剩%d个桃子。\n",n,num);
	return num;

}
main()
{
	int getnumber(int n);
	int i,z;


	for(i=9;i>0;i--)  //天数每天递减
	{
		getnumber(i);  //执行getnumber这个函数
		
		z=getnumbei(i);  //每次将z重新赋值为函数getnumber的返回值,得出循环到九天的桃子数
	}
	printf("猴子第一天有%d个桃子。",z);
	
}


0 回复 有任何疑惑可以回复我~
#include <stdio.h>
int getnumber(int n)
{
	static num;
	
	num=(n+1)*2;
	return num;
}
main()
{
	int getnumber(int n);
	int i,z;
	int n=1;
	for(i=9;i>0;i--)
	{
		z=getnumber(n);
		n=z;
		printf("第%d天剩%d个桃子。\n",i,n);
	}
	printf("猴子第一天有%d个桃子。",n);
}

如上。

0 回复 有任何疑惑可以回复我~
#1

慕粉5652354 提问者

非常谢谢大牛的耐性心指导,不过我有一点疑问,在你的程序中getnember函数作用是计算每天的桃子数,这个函数只和n有关,也就是前天的桃子数,那么这里不需要static num,用int num就可以了
2015-10-27 回复 有任何疑惑可以回复我~

你的想法没错,你是想多次调用函数。所以已经不是递归调用。

0 回复 有任何疑惑可以回复我~
#1

慕粉5652354 提问者

对啊,我的想法就是不用递归做直接用static做。大神你能帮我改改这个程序让这个程序运行吗?
2015-10-26 回复 有任何疑惑可以回复我~

你为啥要用static,他是一个全局静态变量,存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。而此时明显你这个值是不断变化的,num =(num+1)*2;并且你没有调用函数,不能算是递归。

0 回复 有任何疑惑可以回复我~
#1

慕粉5652354 提问者

我的想法是这样的 第一次循环n=9 num=(1+1)*2=4 输出 第9天所剩桃子4个; 因为num定义的是static变量所以第二次num的初值是4 所以第二次循环n=8 num=(4+1)*2=10 输出 第8天所剩桃子10个; ..... 我这样的想法是错误的吗?
2015-10-26 回复 有任何疑惑可以回复我~

你这个程序的原来目的是啥呢?你要把题告诉我。

0 回复 有任何疑惑可以回复我~
#1

慕粉5652354 提问者

猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?并反向打印每天所剩桃子数。
2015-10-26 回复 有任何疑惑可以回复我~

原来是这样的

#include <stdio.h>
int getPeachNumber(n)
{
    int num;    //定义所剩桃子数
    if(n==10)
    {
       return 1;       //递归结束条件
    } 
    else
    {
        num = (getPeachNumber(n+1)+1)*2;   //这里是不应该用递归呢?
        printf("第%d天所剩桃子%d个\n", n, num); //天数,所剩桃子个数
    }
    return num;
}
int main()
{
    int num = getPeachNumber(1);
    printf("猴子第一天摘了:%d个桃子。\n", num);
    return 0;
}


0 回复 有任何疑惑可以回复我~

整个程序都很乱。


0 回复 有任何疑惑可以回复我~
#1

慕粉5652354 提问者

不好意思麻烦您可以教我修改一下吗?我的想法就是把这个原来程序中所用的递归函数去掉然后改成用局部静态变量做。
2015-10-26 回复 有任何疑惑可以回复我~

你错误的地方太多,函数名,for循环中不是逗号是分号。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926215    人
  • 解答问题       20797    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

我把递归函数中的猴子摘桃子问题改成静态变量static这里是哪里出了问题了?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信