常见的递归问题总结

不管是工作中还是面试中经常会遇到有关递归的问题,这里我总结了几种常见的递归问题。

问题一

一列数的规则如下: 1、12、123、1234、12345、123456……,求第n个数的递归算法(n<=9)。

思路:

  1. 这里我只需要将这个数字当成字符串来操作,这样就不涉及到数字的计算。
  2. 字符串最后一位是输入的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 位数是多少?

思路

  1. 通过上面的数据观察其实是前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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
IT柚子的头像IT柚子
上一篇 2019年3月30日 下午7:35
下一篇 2019年3月30日 下午7:37

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注