不管是工作中还是面试中经常会遇到有关递归的问题,这里我总结了几种常见的递归问题。
问题一
一列数的规则如下: 1、12、123、1234、12345、123456……,求第n个数的递归算法(n<=9)。
思路:
- 这里我只需要将这个数字当成字符串来操作,这样就不涉及到数字的计算。
- 字符串最后一位是输入的n的值,所以需要递归的只是前面的部分。
代码:
private static string Function(int n)
{
if (n == 1) return "1";
return Function(n - 1) + n.ToString();
}
结果:

问题二
使用递归实现阶乘效果。例输入2 结果应该是:1*2=2,输入3 结果应该是:1*2*3=6,输入n求阶乘。
代码
使用递归来实现
private static int Function(int n)
{
if (n == 1) return 1;
return n* Function(n - 1) ;
}
这个题也可以通过使用循环来实现
private static int Function2(int n)
{
int result = 1;
for (int i = n; i >0; i--) result = result * i;
return result;
}
结果

问题三
一列数的规则如下 : 1 、 1 、 2 、 3 、 5 、 8 、 13 、 21 、 34…… 求第 30 位数是多少?
思路
- 通过上面的数据观察其实是前2项之和等于第三项,也就是斐波那契数列。
代码
private static int Function(int n)
{
if (n == 1 || n==2) return 1;
return Function(n-2)+ Function(n - 1) ;
}
结果

发布者:IT柚子,转转请注明出处:https://ityouzi.com/archives/common-recursive-problem-summary.html