不管是工作中还是面试中经常会遇到有关递归的问题,这里我总结了几种常见的递归问题。
问题一
一列数的规则如下: 1、12、123、1234、12345、123456……,求第n个数的递归算法(n<=9)。
思路:
- 这里我只需要将这个数字当成字符串来操作,这样就不涉及到数字的计算。
- 字符串最后一位是输入的n的值,所以需要递归的只是前面的部分。
代码:
1 |
<br> private static string Function(int n)<br> {<br> if (n == 1) return "1";<br><br> return Function(n - 1) + n.ToString();<br> }<br> |
结果:
问题二
使用递归实现阶乘效果。例输入2 结果应该是:1*2=2,输入3 结果应该是:1*2*3=6,输入n求阶乘。
代码
使用递归来实现
1 |
private static int Function(int n)<br> {<br> if (n == 1) return 1;<br><br> return n* Function(n - 1) ;<br> }<br> |
这个题也可以通过使用循环来实现
1 |
private static int Function2(int n)<br> {<br> int result = 1;<br><br> for (int i = n; i >0; i--) result = result * i;<br><br> return result;<br> }<br> |
结果
问题三
一列数的规则如下 : 1 、 1 、 2 、 3 、 5 、 8 、 13 、 21 、 34…… 求第 30 位数是多少?
思路
- 通过上面的数据观察其实是前2项之和等于第三项,也就是斐波那契数列。
代码
1 |
private static int Function(int n)<br> {<br> if (n == 1 || n==2) return 1;<br><br> return Function(n-2)+ Function(n - 1) ;<br> }<br> |
结果
发布者:柚子,转转请注明出处:https://ityouzi.com/archives/common-recursive-problem-summary.html