对于递归问题,我们一定要想清楚递归的结束条件,每个递归的结束条件,就是思考这个问题的起始点。
题目1:
思路:当k=1时,任何数的1次方都是原数,此时返回n,这就是递归的结束条件,当k>1时,就使用递归进行拆解:
代码实现如下:
#include
int Func(int n,int k)
{
if (k == 1)
return n;
else
return n * Func(n, k - 1);
}
int main()
{
int n = 0;
int k = 0;
scanf("%d %d", &n, &k);
int ret = Func(n, k);
printf("%d\n", ret);
return 0;
}
代码的执行过程如下:
题目2:
思路:当输入值n<10时,返回n,这就是递归的结束条件,当n>10时:
代码实现如下:
#include
int Func(int n)
{
if (n < 10)
return n;
else
return n % 10 + Func(n / 10);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Func(n);
printf("%d\n", ret);
return 0;
}
题目3:
思路:使用递归时,我们需要知道它的结束条件,当输入值n=1时,返回1,这就是结束条件,当n>1时:
使用非递归时,就是迭代(循环)。
代码实现如下:
#include
//使用递归
int Func(int n)
{
if (n == 1)
return n;
else
return n * Func(n - 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Func(n);
printf("%d\n", ret);
return 0;
}
//使用迭代
//int main()
//{
// int n = 0;
// scanf("%d", &n);
// int ret = 1;
//
// for (int i = 1; i <= n; i++)
// {
// ret *= i;
// }
// printf("%d\n", ret);
//
// return 0;
//}
题目4:
思路:同样的,我们首先要判断递归的结束条件,当输入值n<10时,直接打印n,这就是递归的结束条件。当n>10时:
代码实现如下:
#include
void Print(int n)
{
if (n < 10)
printf("%d ", n);
else
{
Print(n / 10);
printf("%d ", n % 10);
}
}
int main()
{
int n = 0;
scanf("%d", &n);
Print(n);
return 0;
}