// 实验10第4章课后习题11递归.cpp: 定义控制台应用程序的入口点。 #include "stdafx.h" using namespace std; #include<iostream> int sum(int n) { if (n = 0) return 0; if (n > 0) { int c,z=0; c = n * n; z = sum(n - 1) + z; return c; } if (n < 0) { return z; } } int main() { int n; cin >> n; cout<< sum(n); return 0; }
搞不清楚为什么return z;会报错
关于c++多行注释
注释(comments)是源代码的一部分,但他们会被编译器忽略。它们不会生成任何执行代码。使用注释的目的只是使程序员可以在源程序中插入一些说明解释性的内容。
c++支持两中插入注释的方法:
//代码单行注释
第一种方法为行注释,它告诉编译器忽略从//开始至本行结束的任何内容。
/*代码区块注释,也就是多行注释*/
第二种为块注释(段注释),告诉编译器忽略在/*符号和*/符号之间的所有内容,可能包含多行内容。
如果你在源程序中插入了注释而没有用//符号或/*和*/符号,编译器会把它们当成c++的语句,那么在编译时就会出现一个或多个错误信息,程序将不会被运行。
// 实验10第4章课后习题11递归.cpp: 定义控制台应用程序的入口点。 #include "stdafx.h" using namespace std; #include<iostream> int sum(int n) { if (n == 0) //再一次被判断是否相等坑了“==”不等于“=” return 0; if (n > 0) { int c,z=0; //递归调用和循环差距是比较大的,自己想一下逻辑就知道了 c = n * n; z = sum(n - 1) + z; return c; } /*if (n < 0) 这里的语句是可以不用的,因为当n==0的时候返回值为0(这个想法是错误的以后要注意) { return z; 不知道这里return z;为什么会报错, } ???????????????????*/ } int main() { int n; cin >> n; cout<< sum(n); return 0; }
写完之后出现了戏剧性的一幕,
本来我想着这个代码写出来应该输入任何值都会输出0
但是测试发现居然可以,
最后思考得到原来递归和循环还是有较大的差别的,
不能一循环的思维考虑递归
还有就是递归一般是要引入中间变量的