现在我在Linux上练习使用Vim。 我做了一个像这样的简单代码
#include <stdio.h>
int factorial(int n){
if (n<0) { return 0; }
else if (n==0) { return 1; }
else { return n * factorial(n); }
}
int main(void){
int n = 0;
printf("Put n value : ");
scanf("%d", &n); /* non-OP inserted ";" to help people focus on the problem */
printf("%d! = %d\n", n, factorial(n));
return 0;
}
当我输入-1和0时,它有效。他们返回0和1。
但是,当我在n上放置正整数值时,它不起作用。
我试图找出原因,所以我使用了gdb,
但它只是这样说:
编程接收信号SIGSEGV,分段故障 factorial()
中的0x0000000000400620
我的代码出了什么问题?我甚至无法理解这一点。
答案 0 :(得分:4)
当n
您的递归程序永远不会终止时。 return n * factorial(n-1);
的值永远不会递减,因此它会继续以递归方式运行,直到内存耗尽为止。
应为SELECT *
答案 1 :(得分:3)
您的代码导致堆栈溢出。在给定的函数中,else { return n * factorial(n-1); }
永远不会递减。最后的陈述应该是
import { ApolloClient } from 'apollo-client'
import { ApolloLink } from 'apollo-link'
import { InMemoryCache } from 'apollo-cache-inmemory'
import { HttpLink } from 'apollo-link-http'
import { withClientState } from 'apollo-link-state'
const cache = new InMemoryCache()
const stateLink = withClientState({
cache,
resolvers,
defaults,
})
const client = new ApolloClient({
cache,
link: ApolloLink.from([stateLink, new HttpLink()]),
})