C语言打印费波拉契数列的前10项,请使用递归完成,不能使用循环,怎么做?
#include <stdio.h>
void foo(int x, int y, int acc)
{
if (acc > 10) return;
printf("%d ", x);
foo(y, x + y, acc + 1);
}
int main()
{
foo(1, 1, 1);
}
1 1 2 3 5 8 13 21 34 55
int f(int n)
{
if(n==1)
{
printf(“1”);
return 1;
}
else if(n==2)
{
printf(“2”);
return 2;
}
else
{
int t = f(n-1)+f(n-2);
printf(“%d”,t);
return t;
}
#include
int main()
{
int i_1=1,i_2=1,i,n,t;
printf("输入斐波拉契数列项数\n");
scanf("%d",&n);
if(n==1)
{
printf("1\n");
return 0;
}
printf("1 1\n");
if(n==2)
return 0;
for(i=3;i<=n;i++)
{
t=i_1+i_2;
i_1=i_2;
i_2=t;
printf("%d ",i_2);
}
printf("\n");
return 0;
}
斐波那契就是用递归写起来是代码最少的
你仔细想下,不难的。
```package thresh;
import java.util.Scanner;
// 递归
public class Fibonacc {
public static void main(String[] args) {
System.out.println("输入Fibonacc数列长度:");
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
System.out.println("输出Fibonacc数列前" + n + "项:");
for (int j = 1; j <= n; j++) {
System.out.print(getFibonacc(j) + "\t");
if (j % 5 == 0) {
System.out.println();
}
}
}
// 逻辑很简单,第一个数,第二个数字都是1,后面的数字都遵循前面2个数的和
static int getFibonacc(int i) {
if (i == 1 || i == 2) {
return 1;
} else {
return getFibonacc(i - 1) + getFibonacc(i - 2);
}
}
}
数组也可以:
package thresh;
import java.util.Arrays;
import java.util.Scanner;
public class Fibonacc_arr {
public static void main(String[] args) {
System.out.println("输入Fibonacc数列的长度:");
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
// 数列前2个元素都是1
arr[0] = 1;
arr[1] = 1;
for (int i = 2; i < arr.length; i++) {
// 遵循斐波那契数列规律
arr[i] = arr[i - 1] + arr[i - 2];
}
System.out.println("输出Fibonacc数列前" + n + "项");
System.out.println(Arrays.toString(arr));
}
}
package thresh;
public class Test {
public static void main(String[] args) {
System.out.println("CJ.Madlife");
}
}
```// 递归
public class Fibonacc {
public static void main(String[] args) {
System.out.println("输入Fibonacc数列长度:");
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
System.out.println("输出Fibonacc数列前" + n + "项:");
for (int j = 1; j <= n; j++) {
System.out.print(getFibonacc(j) + "\t");
if (j % 5 == 0) {
System.out.println();
}
}
}
// 逻辑很简单,第一个数,第二个数字都是1,后面的数字都遵循前面2个数的和
static int getFibonacc(int i) {
if (i == 1 || i == 2) {
return 1;
} else {
return getFibonacc(i - 1) + getFibonacc(i - 2);
}
}
}
package thresh;
import java.util.Scanner;
// 递归
public class Fibonacc {
public static void main(String[] args) {
System.out.println("输入Fibonacc数列长度:");
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
System.out.println("输出Fibonacc数列前" + n + "项:");
for (int j = 1; j <= n; j++) {
System.out.print(getFibonacc(j) + "\t");
if (j % 5 == 0) {
System.out.println();
}
}
}
// 逻辑很简单,第一个数,第二个数字都是1,后面的数字都遵循前面2个数的和
static int getFibonacc(int i) {
if (i == 1 || i == 2) {
return 1;
} else {
return getFibonacc(i - 1) + getFibonacc(i - 2);
}
}
}