在下列代码中添加斐波拉契数列递归求值:#include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 typedef struct Stack{ int data[MAXSIZE]; int top; }Stack; void push(Stack *s,int x){ if(s->top==MAXSIZE-1){ printf("栈已满"); }else s->data[++s->top]=x; } int pop(Stack *s){ if(s->top==-1){ printf("栈已空"); return -1; }else return s->data[s->top--]; } void pop_k(Stack *s, int k){ if(k == 0) return; printf("出栈%d:\n",pop(s)); pop_k(s, k-1); } int main(){ Stack s; int m,n; printf("输入元素个数:"); scanf("%d",&m); printf("输入元素:"); for(int i=0;i<m;i++){ scanf("%d",&n); push(&s,n); } int k; printf("输入弹出元素个数:"); scanf("%d",&k); pop_k(&s, k); return 0; }
时间: 2024-01-06 19:05:06 浏览: 47
在该代码中添加斐波拉契数列递归求值的功能,可以在 main 函数中添加以下代码:
int fibonacci(int n) {
if(n == 0 || n == 1) return n;
return fibonacci(n-1) + fibonacci(n-2);
}
int main(){
Stack s;
int m,n;
printf("输入元素个数:");
scanf("%d",&m);
printf("输入元素:");
for(int i=0;i<m;i++){
scanf("%d",&n);
push(&s,n);
}
int k;
printf("输入弹出元素个数:");
scanf("%d",&k);
pop_k(&s, k);
// 添加斐波拉契数列递归求值
printf("斐波拉契数列前%d项为:\n", m);
for(int i=0; i<m; i++) {
printf("%d ", fibonacci(i));
}
return 0;
}
这样,程序就可以在输出栈元素之前,输出斐波拉契数列前 m 项的结果。
相关问题
补全C程序,递归求斐波拉契数列,输入正整数n(1<=n<=20)输出的第n项,斐波那契数列的定义如下。要求定义和调用函数fid(n)计算第n个斐波那契数,必须用递归实现。 f(0)=0,f(1)=1 f(n)=f(n-2)+f(n-1) (n>1) #include<stdio.h> int fid(int n) { } int main() { int n; scanf("%d\n",fid(n)); return 0; }
#include<stdio.h>
int fid(int n) {
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
return fid(n - 2) + fid(n - 1);
}
}
int main() {
int n;
scanf("%d", &n);
printf("%d", fid(n));
return 0;
}
2.下列给定程序中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第 1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、...... 例如,若给n输入7,则该项的斐波拉契数值为13。 请改正程序中的错误,使它能得出正确结果。 #include <stdio.h> long fun(int g) { /**********found**********/ switch(g); { case 0: return 0; /**********found**********/ case 1 ;case 2 : return 1 ; } return( fun(g-1)+fun(g-2) ); } main() { long fib; int n; printf("Input n: "); scanf("%d",&n); printf("n = %d\n",n); fib=fun(n); printf("fib = %d\n\n",fib); }
改正后的程序如下:
```c
#include <stdio.h>
long fun(int g) {
switch(g) {
case 0:
return 0;
case 1:
case 2:
return 1;
default:
return (fun(g-1) + fun(g-2));
}
}
int main() {
long fib;
int n;
printf("Input n: ");
scanf("%d", &n);
printf("n = %d\n", n);
fib = fun(n);
printf("fib = %ld\n\n", fib);
return 0;
}
```
修改说明:
1. 删除了 `switch` 语句后的多余分号。
2. 将 `return( fun(g-1)+fun(g-2) );` 修改为 `return (fun(g-1) + fun(g-2));`。
3. 在 `main` 函数中将 `%d` 修改为 `%ld`,因为 `fib` 的类型是 `long`。同时添加 `return 0;` 语句,表示程序正常结束。