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