当前位置: 首页 > 编程笔记 >

C#用递归算法实现:一列数的规则如下: 1、1、2、3、5、8、13、21、34,求第30位数是多少

房时铭
2023-03-14
本文向大家介绍C#用递归算法实现:一列数的规则如下: 1、1、2、3、5、8、13、21、34,求第30位数是多少,包括了C#用递归算法实现:一列数的规则如下: 1、1、2、3、5、8、13、21、34,求第30位数是多少的使用技巧和注意事项,需要的朋友参考一下

方法一:递归算法

/// <summary>
/// 一列数的规则如下: 1、1、2、3、5、8、13、21、34求第30位数是多少, 用递归算法实现。(C#语言)
/// </summary>
/// <param name="pos"></param>
/// <returns></returns>
public int GetNumberAtPos(int pos)
{
  if(pos==0||pos==1)
  {
    return 1;
  }
  int res = GetNumberAtPos(pos - 1) + GetNumberAtPos(pos - 2);
  return res;
}

方法二:不用递归

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

namespace Test
{
  public class Class1
  {
    private ArrayList list = new ArrayList();

    public Class1()
    {
    }

    public Class1(int num)
      : base()
    {
      int i;

      for (i = 1; i <= num; i++)
      {
        list.Add(Calculation(i));
      }
    }

    private int Calculation(int num)
    {
      if (num == 1 || num == 2)
        return 1;
      else
        return Convert.ToInt32(list[num - 2]) + Convert.ToInt32(list[num - 3]);
    }

    public int Calculation()
    {
      return Convert.ToInt32(list[list.Count - 1]);
    }
  }

  public class test
  {
    public static void Main()
    {
      int j;
      int num;
      for (j = 1; j < 100; j++)
      {
        Console.WriteLine("你要计算第多少位:");
        string readstr;
        readstr = Console.ReadLine();
        if (!string.IsNullOrEmpty(readstr))
        {
          if (int.TryParse(readstr, out num))
          {
            if (num < 1)
              continue;
            else
            {
              Class1 c1 = new Class1(num);
              Console.WriteLine(c1.Calculation());
            }
          }
          else
          {
            continue;
          }
        }
        else
        {
          break;
        }
      }
    }
  }
}

方法三:用循环实现

public long getNumber(int pos)
{
  long one = 1;
  long two = 1;
  if (pos == 0 || pos == 1)
  {
    return 1;
  }
  int i = 3;
  long sum = 1;
  while (i <= pos)
  {
    sum = one + two;
    one = two;
    two = sum;
    i++;
  }
  return sum;
}

以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少,用递归算法实现。相关面试题,主要包含被问及一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少,用递归算法实现。时的应答技巧和注意事项,需要的朋友参考一下 答:public class MainClass { public static void Ma

  • 本文向大家介绍系列1 ^ 2 + 3 ^ 2 + 5 ^ 2 +的总和。。。+(2 * n-1)^ 2在C ++中,包括了系列1 ^ 2 + 3 ^ 2 + 5 ^ 2 +的总和。。。+(2 * n-1)^ 2在C ++中的使用技巧和注意事项,需要的朋友参考一下 在这个问题上,我们得到级数n。我们的任务是找到给定n值的序列1 ^ 2 + 3 ^ 2 + 5 ^ 2 + ... +(2 * n-1)

  • 本文向大家介绍Java递归求和1+2+3+...+n实例详解,包括了Java递归求和1+2+3+...+n实例详解的使用技巧和注意事项,需要的朋友参考一下 Java递归求和1+2+3+...+n 扩展学习 输入一个数: 4 10 代码: 思路: 计算前n个数的总和等于第n-1个数+n; 以上就是本次介绍的全部相关知识点,感谢大家的学习和对呐喊教程的支持。

  • 本文向大家介绍程序在C ++中找到系列0、2、1、3、1、5、2、7、3 ...的第N个项,包括了程序在C ++中找到系列0、2、1、3、1、5、2、7、3 ...的第N个项的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论一个程序以查找系列0、2、1、3、1、5、2、7、3的第N个项。 为此,我们将提供一个号码。我们的任务是在特定位置找到给定系列的术语。 示例 输出结果

  • 为什么这个程序的输出是而不是 当你除以3/2,它等于1.5,我认为Java只取整数的第一个值。发生什么事?

  • 题目链接 NowCoder 题目描述 要求不能使用乘除法、for、while、if、else、switch、case 等关键字及条件判断语句 A ? B : C。 解题思路 使用递归解法最重要的是指定返回条件,但是本题无法直接使用 if 语句来指定返回条件。 条件与 && 具有短路原则,即在第一个条件语句为 false 的情况下不会去执行第二个条件语句。利用这一特性,将递归的返回条件取非然后作为