A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘永川 中级黑马   /  2016-9-17 21:10  /  949 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

需求:一列数的规则如下: 1、1、2、3、5、8、13、21、34......
  求第30位数是多少, 用递归算法实现
没有思路  有没有大神教教

5 个回复

倒序浏览
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);
          }
        }
}
回复 使用道具 举报
用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;
}
回复 使用道具 举报
好吧,2L的和我的思路相反的,推荐他的。
回复 使用道具 举报
递归的核心是找出规律,其实只要去分析,都不会有太大问题
回复 使用道具 举报
递归用于文件操作是最好的,其他最好用其他的,有时考试时,一道简单的题,用数组来做就轻易通关,如果你第一思想用递归,那么难度会非常大
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马