黑马程序员技术交流社区

标题: 递归很难得题,求解答 [打印本页]

作者: 刘永川    时间: 2016-9-17 21:10
标题: 递归很难得题,求解答
需求:一列数的规则如下: 1、1、2、3、5、8、13、21、34......
  求第30位数是多少, 用递归算法实现
没有思路  有没有大神教教
作者: Fate_stay    时间: 2016-9-17 21:42
public class Fibonacci {
        public static void main(String[] args) {
                System.out.print(getFibo(30));
        }
                 

        private static int getFibo(int i) {
          if (i == 1 || i == 2) {
                  return 1;
          } else {
                  return getFibo(i - 1) + getFibo(i - 2);
          }
        }
}
作者: CreScert    时间: 2016-9-17 22:05
用C语言写的,但是和java没有啥区别,应该能看得懂,结果832040


[C] 纯文本查看 复制代码
#include <Windows.h>
#include <stdio.h>

/*
        将个数也作为参数传入递归函数,第一次传入2,因为第一次要计算第三个值
        每次进到递归函数中先计算传入的两个值将和保存下来(次数只加一,不参与运算),
        然后将传入的参数的后一个值和之前保存的和作为参数调用递归,
        每次都将次数与30做判断,最后满足返回和
*/
//递归叠加函数
//参数i,j:将要相加的值,
//参数number:个数
int add(int i,int j,int Number)
{
        //计算两数之和,将和保存下来
        int Sum=i+j;

        //个数相加
        Number++;

        //如果是第30位开始返回,返回之前保存的和
        if(Number==30)return Sum;

        //否则进入递归继续相加,但是传入的参数是 传入的“将要相加的值”的后者,还有个数
        int Total=add(j,Sum,Number);

        //最后返回总和
        return Total;
}
int main()
{
        //调用递归叠加函数,从1,1开始计算,将要计算第三个值,所以传入2
        //并打印
        printf("%d",add(1,1,2));

        system("pause");
        return 0;
}

作者: CreScert    时间: 2016-9-17 22:09
好吧,2L的和我的思路相反的,推荐他的。
作者: 18001105207    时间: 2016-9-17 22:12
递归的核心是找出规律,其实只要去分析,都不会有太大问题
作者: 一半的留言    时间: 2016-9-17 22:26
递归用于文件操作是最好的,其他最好用其他的,有时考试时,一道简单的题,用数组来做就轻易通关,如果你第一思想用递归,那么难度会非常大




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2