对于递归问题,我们一定要想清楚递归的结束条件,每个递归的结束条件,就是思考这个问题的起始点。
题目1:
思路:当k=1时,任何数的1次方都是原数,此时返回n,这就是递归的结束条件,当k>1时,就使用递归进行拆解:
代码实现如下:
#include <stdio.h>int Func(int n,int k)
{if (k == 1)return n;elsereturn 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 <stdio.h>int Func(int n)
{if (n < 10)return n;elsereturn 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 <stdio.h>//使用递归
int Func(int n)
{if (n == 1)return n;elsereturn 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 <stdio.h>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;
}