题目内容
如何得到 1234 的每一位?
递归实现的解题思路
代码实现
#include
void print(unsigned int n)
{
if (n > 9)// n>9 说明 n 还有的拆
{
print(n / 10);
}
printf("%u ", n % 10);//递推结束开始回归时这条语句才能被执行
}
int main()
{
unsigned int num = 1234;
print(num);
return 0;
}
代码分析
题目内容
解题思路
代码实现
#include
int my_strlen(char* str)
{
//如果第一个字符不等于 \0,那它的长度至少是1
if (*str != '\0')
{
return 1 + my_strlen(str+1);
}
else
{
return 0;
}
}
int main()
{
char arr[] = "abc";
printf("%d\n", my_strlen(arr));
return 0;
}
代码分析
my_strlen(“abc”)
1 + my_strlen(“bc”)
1+1+my_strlen(“c”)
1+1+1+my_strlen(“”)
阶乘公式
代码实现
#include
int fac(int n)
{
if (n > 1)
{
return n * fac(n - 1);
}
else
{
return 1;// 0 和 1 的阶乘都是 1
}
}
int main()
{
int n;
scanf("%d", &n);//以 n = 5 做例子
printf("%d\n", fac(n));
return 0;
}
代码分析
斐波那契数
斐波那契数公式
代码实现
#include
int Fib(int n)
{
if (n > 2) //从第三位才开始求斐波那契数
{
return Fib(n - 1) + Fib(n - 2);
//公式:fib(n) = fib(n-1) + fib(n-2)
}
else
{
return 1; // 前两个斐波那契数都是 1
}
}
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", Fib(n));
return 0;
}
不推荐使用递归求斐波那契数
#include
int count_fib_3 = 0;
int Fib(int n)
{
//记录在运算某个数的过程中求了多少次第 3 个斐波那契数
if(3==n)
{
count_fib_3++;
}
if (n > 2)
{
return Fib(n - 1) + Fib(n - 2);
}
else
{
return 1;
}
}
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", Fib(n));
printf("%d\n", count_fib_3);
return 0;
}
迭代定义
解题思路
解题步骤
代码实现
#include
int Fib(int n)
{
int a = 1, b = 1, c = 1;
while(n >= 3)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", Fib(n));
return 0;
}
题目内容
char str[] = "abcdef";
逆序之后数组的内容变成:fedcba
解题思路
整个问题可以分解成两个部分。
解题步骤
递归执行条件
代码实现
#include
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse(char* str)
{
int len = my_strlen(str);
char t = *str; //step1
*str = *(str + len - 1);//step2
*(str + len - 1) = '\0';//step3
//求的是中间这个串的长度,所以要+1
if (my_strlen(str + 1) >= 2)
{
reverse(str + 1); //step4
}
*(str + len - 1) = t; //stpe5
}
int main()
{
char str[] = "abcdefg";
reverse(str);//字符串逆序
printf("%s\n", str);
return 0;
}
题目内容
解题思路
递归执行条件
代码实现
#include
unsigned int DigitSum(unsigned int n)
{
if (n > 9)
{
return DigitSum(n / 10) + n % 10;
}
}
int main()
{
unsigned int n;
scanf("%u", &n);
printf("%u\n", DigitSum(n));
return 0;
}
题目内容
解题思路
代码实现
#include
int my_pow(int n, int k)
{
if (k > 0)
{
return n * my_pow(n, k - 1);
}
}
int main()
{
int n = 0;
int k = 0;
while (EOF != scanf("%d %d", &n, &k))
{
printf("%d^%d = %d\n", n, k, my_pow(n, k));
}
return 0;
}