这个函数为什么第二个循环不进入啊,别的方法我知道我只是想知道这个哪里错了以及怎么改
(m/pow(10,cnt-1))==(m%10)这个条件估计难达成。你可以在前面分别输出这两个值看看。
例1、计算5的阶乘
例2、
#include <stdio.h>
/* 定义获取单词数量的函数 */
int getWordNumber(int n)
{
if(n == 1)
{
return 1; //第一天只会1个单词
}
else{
return getWordNumber(n-1)+n ; //到第n天会的单词数量
}
}
int main()
{
int num = getWordNumber(10); //获取会了的单词数量
printf("小明第10天记了:%d个单词。\n", num);
return 0;
}
例3、猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?并反向打印每天所剩桃子数。
#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;
}
例4、有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2人大两岁。问第2个人,说比第1个人大两岁。最后 问第1个人,他说是10岁。请问第5个人多大?
程序分析:
利用递归的方法,递归分为回推和递推两个阶段。要想知道第5个人岁数,需知道第4人的岁数,依次类推,推到第1人(10岁),再往回推。
#include <stdio.h>
int getAge(n)
{
int num;
if (n == 1)
{
return 10; //递归结束条件
}
else
{
num = getAge(n-1) +2;
printf("第%d个人的年纪是%d\n", n, num);
}
return num;
}
int main()
{
int num = getAge(5);
printf("第5个人%d岁了\n", num);
return 0;
}
例5、喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水, 给20元,可以多少汽水。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int Capsule(n)//num 每次的瓶盖数.n 每次喝到的饮料.sum 一共喝到的饮料
{
int sum;
if (n < 1)
{
return 1;
}
else {
sum = Capsule(n/2) +n;
}
return sum;
}
int main(void)
{
int n = 20;//喝的汽水的数量
printf("所喝汽水的数量为%d\n",Capsule(n));
}
在你的代码上修改的,仅供参考,谢谢!
#include <stdio.h>
#include<math.h>
int main(int argc, char *argv[])
{
int m, n, cnt = 0;
scanf("%d", &m);
n = m;
while (n > 0)
{
n /= 10;
cnt++;
}
printf("\n%d\n\n", cnt);
while (cnt > 0 && (m / (int)pow(10, cnt - 1) == m % 10))
{
m = m / 10;
m -= m / (int)pow(10, cnt - 2) * (int)pow(10, cnt - 2);
cnt -= 2;
printf("1");
}
puts("\n");
cnt < 2 ? puts("yes") : puts("no");
return 0;
}